从字符串中提取Word

时间:2016-07-02 05:11:50

标签: c++ string loops isspace

我正在完成家庭作业,我似乎无法正常使用此功能。有没有人有任何想法为什么这不会起作用来创建一个由两个空格(字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]));
}

2 个答案:

答案 0 :(得分: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超出范围时,请注意抛出的异常。

答案 1 :(得分:0)

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

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

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

wordIndices[i] = s.length()

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