我想从字符串句子中取出单词并在 C++ 中得到此错误

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

本文关键字:C++ 错误 字符串 句子 单词      更新时间:2023-10-16
#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 将删除句子前面的所有空格。后置条件:句子在第一个单词前面没有空格。

我想从字符串句子中取出单词并在 C++ 中得到此错误

错误是 -> 字符串下标超出范围

extractFirstWord中,如果您还没有找到空间,您会不断增加i。但是,如果字符串是字符串中的最后一个单词,则可以索引超过字符串的末尾。更改while条件,如下所示:

while(i < sentence.length() && sentence[i]!=' ')

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

使用 stringstream

#include <iostream>
#include <sstream>
int main(){
    std::stringstream ss("   first second.   ");
    std::string word;
    ss >> word;
    std::cout << word << std::endl;//first
}
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);

}