Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2013, 19:47   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию strtok

После использования функции strtok, как мне обращаться к лексемам?

Допустим разбил я предложение мама мыла раму на 3 слова, теперь мне нужно сравнить первое и второе слово, одинаковые ли они? Как это реализовать?
Praud вне форума Ответить с цитированием
Старый 10.12.2013, 20:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

При разбивке просто запоминай адрес начала очередного символа. Короче говоря массив того что вернет strtok() - это будет как-бы массив строк.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.12.2013, 20:37   #3
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Помогите, если не сложно, где именно запоминать?

Код:
p=strtok(str, " ,.-");
	
	while(p!=NULL)
	{
		printf("%s|", p);
		p=strtok(NULL, " ,.-");
	}
Praud вне форума Ответить с цитированием
Старый 10.12.2013, 20:58   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Запоминать в массиве. Например:
Код:
char *a[255]; //Это массив строк
int i=0;	
a[i++]=strtok(NULL, " ,.-");
	while(a[i-1]!=NULL)
	{
		printf("%s|", p);
		a[i++]=strtok(NULL, " ,.-");
	}
for(int k=0;k<i;k++){
 что-то делаем со строкой a[k]
}
Это не самый удачный пример, потому что массив строк фиксированный. можно использовать vector или list из STL, но это уже детали.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.12.2013, 21:16   #5
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Запоминать в массиве. Например:
Код:
char *a[255]; //Это массив строк
int i=0;	
a[i++]=strtok(NULL, " ,.-");
	while(a[i-1]!=NULL)
	{
		printf("%s|", p);
		a[i++]=strtok(NULL, " ,.-");
	}
for(int k=0;k<i;k++){
 что-то делаем со строкой a[k]
}
Это не самый удачный пример, потому что массив строк фиксированный. можно использовать vector или list из STL, но это уже детали.
Как я понимаю тут где-то потерялся цикл?
Praud вне форума Ответить с цитированием
Старый 10.12.2013, 21:35   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Где потерялся? Все два цикла в моем примере на месте.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.12.2013, 21:39   #7
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

А, понял. Я что-то дно) А что за переменная p? которую мы выводим в цикле? еще один указатель?
Praud вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
strtok Pein95 Общие вопросы C/C++ 0 09.02.2013 22:48
strtok miftayka Visual C++ 4 22.05.2012 13:21
strtok Matr1x Общие вопросы C/C++ 5 18.02.2012 20:34
strtok... Joe_Tribbiani Общие вопросы C/C++ 0 02.05.2010 15:52
си. strtok. RZMTZM Общие вопросы C/C++ 2 05.01.2010 12:59