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