教授给了我一个代码,该代码需要多行输入。我目前正在更改当前工作的代码,遇到一个问题。该代码旨在获取输入字符串,并将其分成句点中的句子,然后将这些字符串放入向量中。

vector<string> words;
string getInput() {
  string s = ""; // string to return
  bool cont = true; // loop control.. continue is true
  while (cont){     // while continue
    string l;       // string to hold a line
    cin >> l;       // get line
    char lastChar = l.at(l.size()-1);
    if(lastChar=='.') {
        l = l.substr(0, l.size()-1);
        if(l.size()>0){
            words.push_back(s);
            s = "";
        }
    }
    if (lastChar==';') {     // use ';' to stop input
        l = l.substr(0, l.size()-1);
        if (l.size()>0)
          s = s + " " + l;
        cont = false; // set loop control to stop
      }

    else
      s = s + " " + l; // add line to string to return
                       // add a blank space to prevent
                       //   making a new word from last
                       //   word in string and first word
                       //   in line
  }
  return s;
}

int main()
{
  cout << "Input something: ";
  string s = getInput();
  cout << "Your input: " << s << "\n" << endl;
  for(int i=0; i<words.size(); i++){
    cout << words[i] << "\n";
  }
}


该代码将字符串放入向量中,但采用句子的最后一个单词并将其附加到下一个字符串,我似乎无法理解为什么。

最佳答案

这条线

s = s + " " + l;


除了输入的结尾,即使最后一个字符为“。”,也将始终执行。您很可能在两个else -s之间缺少一个if

关于c++ - 拆分句子并将其放入 vector 中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28848063/

10-12 20:53