![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Berkut |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 16.3.2004 Репутация: нет Всего: нет |
Есть две строки string 2, string3; Надо разбить их на лексемы и сравнить попарно.
Так вот, работает это не так как хотелось бы, если здесь ошибка? |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
char seps2[]="\n";
ИМХО сделай так : char seps2 = '\n'; - помоему \n определяется как одиночный символ. Но это так Добавлено @ 15:07 token2 = strtok(string2,seps2); Ну точно Добавлено @ 15:10 И каким образом у тебя string2 и 3 обьявлены ? |
|||
|
||||
| Berkut |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 16.3.2004 Репутация: нет Всего: нет |
Убрал массив, работает все равно не так.
char string2[255]; char string3[255]; |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
strtok() - какие у неё типы аргументов ?
|
|||
|
||||
| Berkut |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 16.3.2004 Репутация: нет Всего: нет |
Проблема в этом:
string1: abc abc2 abc3 string2: qwe qwe2 qwe3 Результат: abc-qwe и дальше строк из string 1 нету Добавлено @ 15:16 char *strtok(char* s1,const *s2) |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
char *strtok(char* s1,const *s2)
Ну дык и подставляй указатели, функция требует не значение, а адрес имхо. Добавлено @ 15:26 while((token2!=NULL)||(token3!=NULL)) |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
Ладно забыли
Мне показалось, что неправильно работают аргументы с указателями, сам сейчас с этим мучаюсь |
|||
|
||||
| Chaos A.D. |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Единственная проблема в том, что strtok обрабатывает одну строку, пока она не кончится. Если-бы ты отдебажил свой код, увидел бы, что для твоего примера первая лексема станет равна abc, как и надо; вторая qwe. Вроде все тоже нормально. Далее qwe2 и qwe3. И все. а дальше возвращается NULL и условие не выполняется. Если почитать описание strtok, то можно увидеть, что если первый параметр = NULL, то читается лексема из последней используемой строки. Не знаю, как функция это делает. Может буферизирует строку (глупо!), или сохраняет статический указатель на последнюю используемую строку(вераятнее всего). Вобщем, если ты строки читаешь из файла или еще откуда - то сначала прочитай все лексемы строки string2 в один массив, а потом сравнивай с теми, что будешь читать из второй строки. Но тут много минусов - дополнительные расходы памяти, необходимость в динамическом массиве. При всем уважении к тебе и твоим знаниям, я бы лично никогда не стал писать подобный код в таком стиле, и не посоветовал тебе. Но раз уж надо... Вот тебе пример еще одного варианта реализации твоей задачи только с использованием встроенных возможностей С. Без массивов, без всяких контейнеров и прочей... кхм.
disp1, disp2 - это у нас типа смещение от начала массива символов. Если одна из строк пустая - прога будет жить. И будет корректно сравнивать все, что ей подсунешь. Против strtok ничего не имею, но повторюсь - ИМХО это _очень_ убогий способ выдирания лексем. Лучше никому не показывать его в качестве демонстрации своего програмистского мастерства, и сразу в топку. --------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |