2016-07-02 3 views
0

Я работаю над домашним заданием, и я не могу получить эту функцию правильно. Кто-нибудь есть идеи о том, почему это не будет работать, чтобы создать подстроку, состоящую из символов между двумя пробелами (слово 0, слово 1 и т. Д.)?Извлечь слово из строки

string extractWord(string s, int wordNum) 
{ 
    int wordIndices[10]; 
    int i = 0; 
    for (int z = 0; z < s.length(); z++) 
    { 
     if (isspace(s.at(z))==true) 
     { 
      wordIndices[i] = z; 
      i++; 
     } 
    } 
    return s.substr(wordIndices[wordNum], abs(wordIndices[wordNum+1] - wordIndices[wordNum])); 
} 
+0

Если '' '' 'word1 word2" ', тогда' wordIndices [0] 'будет' 5'. Я не думаю, что ты этого хочешь. Другими словами, если нет ведущих символов пробела, 'wordIndices [0]' должно быть установлено в '0'. –

+0

BTW, вы можете рассматривать 'std :: string' как массив и не нуждаетесь в функции' at', например 's [z]'. –

ответ

0

Самый простой способ заключается в использовании std::istringstream:

std::string extractWord(std::string s, int wordNum) 
{ 
    std::istringstream iss(s); 
    std::string word; 
    std::vector<std::string> words; 
    while(iss >> word) { 
     words.push_back(word); 
    } 
    return words[wordnum]; 
} 

Осознайте исключения выброшен, когда wordnum выходит за пределы.

+0

Я уже знаю, вы придете сюда, сказав: «мое задание ограничивает меня использованием бла-бла-б», хотя это не имеет значения в реальном программировании на языке C++. –

0

В этом случае, прежде чем цикл, вы должны попробовать добавить это, если заявление:

if (! isspace(s.at(0)) 
{ 
    wordIndices[i] = 0; 
    i++; 
} 

вопрос вы столкнулись, если wordNum является 1, и нет ни одного ведущие пространства, то wordIndices [0] установите на первое место, которое не очень хорошо работает с вашим кодом.
Кроме того, после того, как цикл, вы должны поставить:

wordIndices[i] = s.length() 

, как при извлечении последнего слова, wordIndices [wordNum + 1] имеет значение вредную.

+0

Эй, спасибо за помощь. –

+0

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