0
#include<iostream>
#include<string>
using namespace std;

void extractFirstWord(string& sentence, string& word);
void processBlanks(string& sentence);

int main() {
    string sentence, word;
    cout << "Input a sentence: ";
    getline(cin, sentence);

    while (sentence != "") {
          processBlanks(sentence); // removes all blanks from the front of sentence
          if (sentence.length() > 0) { // removing blanks may have made sentence null - cannot extract from a null string
             extractFirstWord(sentence, word); // gets first word from sentence and puts into word
             cout << word << endl; // output one word at a time
          }
    }

    system("PAUSE");
    return 0;
}

void extractFirstWord(string& sentence, string& word)
    {
        int i=0;
        while(sentence[i]!=' ')
        {
            i++;        
        }
        word=sentence.substr(0,i);
        sentence=sentence.substr(i);
}
// extractFirstWord removes the substring of sentence 
// from the beginning to the first space from sentence 
// and stores the same string into word. sentence is
// shortened accordingly.
// Postcondition: sentence is shortened, and word
//                is appropriately the first word in
//                sentence.

void processBlanks(string& sentence)
    {
        int i=0;
        while(sentence[i]==' '){i++;}
        sentence=sentence.substr(i);
    }

processBlanks will remove all of the spaces in front of sentence. Postcondition: sentence has no spaces in front of the first word.

i want to take out words from a string sentence and get this error in c++

Error is -> String subscript out of range

4

4 回答 4

3

在中,如果您还没有找到空间extractFirstWord,您会继续增加。i但是,如果它是字符串中的最后一个单词,您可能会在字符串末尾之后进行索引。像这样改变while条件:

while(i < sentence.length() && sentence[i]!=' ')
于 2013-04-21T13:46:36.513 回答
0
void extractFirstWord(string& sentence, string& word)
{
    int i=0;
    while(i<sentence.size() && sentence[i]!=' ')  // i should be less than sentence size
    {
        i++;        
    }
    word=sentence.substr(0,i);
    sentence=sentence.substr(i);

}

于 2013-04-21T13:51:12.310 回答
0

只需考虑输入没有空格的情况,您的变量 i 将递增直到单词的长度,在这种情况下它将超出范围。尝试在 substr() 方法之前检查 i 是否等于单词的长度

于 2013-04-21T13:48:17.857 回答
0

使用字符串流

#include <iostream>
#include <sstream>

int main(){
    std::stringstream ss("   first second.   ");

    std::string word;

    ss >> word;

    std::cout << word << std::endl;//first
}
于 2013-04-21T13:50:34.380 回答