2016-01-31 2 views
-1

У меня проблема на C++, которая просит меня разбить фразу на слова и показать каждое слово в строке.Как strtok фактически принимает каждое слово?

Фраза взята из файла phrase.in и положить в векторе полукокса phrs[256]

Теперь проблема здесь:

p = strtok(aux, " "); 

while(p) 
{ 
    p = strtok(NULL, " "); 
    cout << p; 
} 

Когда я пытаюсь разделить фразу «Память ОЗУ важно ", это только показывает мне

memory 
is 
important 

Что я могу сделать, чтобы программа показала мне первое слово?

+0

Да, я скопировал из СПОТ [256] в Окс [256], чтобы сохранить оригинальную фразу – itmushroom

+0

Это выглядит как домашнее задание, поэтому использование 'strtok', вероятно, хорошо, но в целом вам лучше избегать его в производственном коде. Это не функция потоковой безопасности. – StoryTeller

+1

Не используйте 'strtok'. Преобразуйте вектор char в строку 'std :: string' и затем добавьте его. –

ответ

3

В вашем коде первый вызов strtok возвращает указатель на начало строки, где находится строка "RAM". Следующий звонок составляет p. Указывает на следующее слово, пропуская "RAM".

Чтобы исправить это, просто обменять две строки в while -loop:

while(p) 
{ 
    cout << p; 
    p = strtok(NULL, " "); 
} 
+0

Большое спасибо. Я все еще новичок на C++, поэтому мне все еще нужно узнать об этих вещах. Я буду иметь в виду это. :) – itmushroom

+0

@itmushroom, единственное, о чем нужно помнить, - это прочитать документацию API, которую вы используете. – StoryTeller

+0

@itmushroom Если на ваш вопрос был дан ответ, примите наилучший ответ, чтобы вознаградить создателя и пометить проблему как решение. – Downvoter