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]));
}
4

2 回答 2

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当超出范围时,请注意引发的异常。

于 2016-07-02T05:17:20.113 回答
0

在这种情况下,在 for 循环之前,您应该尝试添加以下 if 语句:

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

您面临的问题是如果 wordNum 为 1 并且没有前导空格,则 wordIndices[0] 设置为第一个空格,这与您的代码不兼容。
此外,在 for 循环之后,您应该输入:

wordIndices[i] = s.length()

与提取最后一个单词时一样,wordIndices[wordNum+1] 具有垃圾值。

于 2016-07-02T05:31:11.583 回答