从字符串中提取单词
Posted
技术标签:
【中文标题】从字符串中提取单词【英文标题】:Extract a Word from a String 【发布时间】:2016-07-02 05:11:49 【问题描述】:我正在处理家庭作业,但我似乎无法正确使用此功能。有没有人知道为什么这不能创建一个由两个空格(单词 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]));
【问题讨论】:
如果s
是"word1 word2"
,那么,wordIndices[0]
将是5
。我不认为你想要那个。换句话说,如果没有前导空白字符,wordIndices[0]
必须设置为0
。
顺便说一句,你可以把std::string
当作一个数组,不需要at
函数,比如s[z]
。
【参考方案1】:
最简单的方法是使用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
超出范围时引发的异常。
【讨论】:
我已经知道了,你会来这里说 “我的任务限制我使用等等等等”,尽管这在使用 c++ 进行实际编程中并不重要.【参考方案2】:在这种情况下,在 for 循环之前,您应该尝试添加以下 if 语句:
if (! isspace(s.at(0))
wordIndices[i] = 0;
i++;
您面临的问题是如果 wordNum 为 1 并且没有前导空格,则 wordIndices[0] 设置为第一个空格,这与您的代码不兼容。 此外,在 for 循环之后,您应该输入:
wordIndices[i] = s.length()
在提取最后一个单词时,wordIndices[wordNum+1] 有一个垃圾值。
【讨论】:
以上是关于从字符串中提取单词的主要内容,如果未能解决你的问题,请参考以下文章