Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция разделения папаметров 
:(
    Опции темы
XSInet
Дата 30.4.2006, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 4.1.2006

Репутация: нет
Всего: нет



Здравствуйте, не могли бы вы помочь с функцией.
У функции два парметра : строка вида - "&123&456&789", и номер параметра. Параметры разделяются симвлом "&".
Вот так эта функция у меня получилась на Дельфи :

function Split(Str : String; Number : Integer) : String;
var
 i, M : Integer;
begin
 Result := '';
 M      := 0;

 for i:=1 to Length(Str) do
   begin
     if (Str[i] = '&') then Inc(M);
     if (M = Number) then Result := Result + Str[i];
     if (M > Number) then break;
   end;

delete(Result, 1, 1);
end;

Следующая функция по чему-то не работает :

char *split(char *dest, int number)
{
    char *start;

    int i, R;
    R = 0;

    for (i = 0; i <= strlen(dest); i++)
        {
        if (dest[i] == '&') R++;
        if (number  == R  ) start = start + dest[i];
        if (R     > number) break;
        }

    return(start);
}
 
PM MAIL   Вверх
Voldemar2004
Дата 30.4.2006, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



XSInet, если я правильно тебя понял, тебе нужно разделить лексемы:
Код

#include <string.h>    // strlen
#include <conio.h>     // getch
#include <iostream.h>  // cout, cin

char *split(char *dest)
{

    for (int i = 0; i < strlen(dest); i++)
    {
    if(dest[i] == '&') dest[i] = ' ';
    }

    return dest;

}

int main(int argc, char* argv[])
{
char *dest="&Ich&&&werde&in&die&Tannen&gehen &";

        cout<<(split(dest));

getch();
return 0;
}
  

Это сообщение отредактировал(а) Voldemar2004 - 30.4.2006, 12:36


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
XSInet
Дата 30.4.2006, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 4.1.2006

Репутация: нет
Всего: нет



Нет, такую функцию я сам уже делал. Мне надо вернуть из строки "&123&456&789" допустим второй параметр, тоесть "456". 
PM MAIL   Вверх
maxim1000
Дата 30.4.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



если хочется работать со строками, как в Паскале, то лучше использовать std::string
char * - это просто массив символов без кучи операций... 


--------------------
qqq
PM WWW   Вверх
DeadSoul
Дата 30.4.2006, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11





--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Daevaorn
Дата 30.4.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(maxim1000 @  30.4.2006,  13:37 Найти цитируемый пост)
char * - это просто массив символов без кучи операций...  

Ну на самом деле не совсем так. Может кучи там и нет, но достаточно много в раcпоряжении программиста имеется. В частности интересная функция strtok 
PM MAIL WWW   Вверх
MAKCim
Дата 30.4.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Код

string get(const char* str, int num, char sym)
{
    string s;
    while (*str && num)
    {
        if (*str==sym) --num;
        ++str;
    }
    while (*str && *str!=sym) s+=*str, ++str;
    return s;
}
 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Voldemar2004
Дата 1.5.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



Цитата(XSInet @  30.4.2006,  13:22 Найти цитируемый пост)
Мне надо вернуть из строки "&123&456&789" допустим второй параметр, тоесть "456". 
Код

#include <iostream.h>   // cout, cin
#include <conio.h>      // getch()
#include <string.h>     // strlen()

int main(int argc, char* argv[])
{

char *a = "&1&3123&434&&&&&1232333&13";

int counter, count=0;

cout<<"counter: "; cin>>counter;

--counter;

int i=0, j=1;

do
{
        if(a[i]!='&')
        {

        if(count==counter) cout<<a[i];

                if(a[j]=='&')
                {
                count++;
                }
        }

i++; j++;

}
while(i != strlen(a) );

getch();
return 0;
}
Ну а из этого кода функцию сделать несложно. 


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1480 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.