在字符串中找到最后一个单词
Finding last word in a string
我正在尝试返回字符串中的最后一个单词,但是在for循环方面遇到了麻烦。当我尝试测试功能时,我只会得到空字符串。不确定问题是什么。非常感谢任何帮助。
string getLastWord(string text)
{
string revLastWord = "";
string lastWord = "";
if(text == "")
{
return text;
}
for(size_t i = text.size()-1; i > -1; i--)
{
if((isalpha(text[i])))
{
revLastWord+=text[i];
}
if(revLastWord.size()>=1 && !isalpha(text[i-1]))
{
break;
}
}
for(size_t k = revLastWord.size()-1; k > -1; k--)
{
lastWord+=revLastWord[k];
}
return lastWord;
}
我正在编码另一种解决方案,直到我退房并阅读评论;他们非常有帮助。此外,@justinrandall的建议非常有帮助。我发现find_last_of()
substr()
更好地陈述了功能的意图 - 更肯定地编写,更易于阅读。谢谢!希望这可以帮助!它帮助了我。
std::string get_last_word(std::string s) {
auto index = s.find_last_of(' ');
std::string last_word = s.substr(++index);
return last_word;
}
/**
* Here I have edited the above function IAW
* the recommendations.
* @param s is a const reference to a std::string
* @return the substring directly
*/
std::string get_last_word(const std::string& s) {
auto index = s.find_last_of(' ');
return s.substr(++index);
}
其他答案告诉您出了什么问题,尽管您还应该知道为什么这是错误的。
通常,在循环条件下使用未符号值类型时,您应该非常谨慎。比较诸如std::size_t
和签名类型(如常数-1
)的无符号类型会导致签名转换为无签名类型,因此-1
成为最大的std::size_t
值。
如果您在整个代码中都放了一些打印语句,您会注意到您的循环永远不会实际输入,因为条件始终是错误的。执行算术时使用int
,尤其是将签名数字与。
相关文章:
- lower_bound()返回最后一个元素
- 获取向量C++中第一个值和最后一个值的和
- 获取用C/C++打印的最后一个字符串
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 将 C++ 类属性与分号前面的最后一个单词对齐;在 emacs 中
- 在字符串中找到最后一个单词
- C++ 输出在读取文本文件时跳过最后一个单词
- 如何将文本(诗歌)拆分为行(字符串/字符[])并查找每个行的最后一个单词
- Fstream不会保存文件中的最后一个单词,也不会从文件中读取
- 句子中的最后一个单词在句子颠倒后不打印
- 字符串中的最后一个单词没有反转
- 你如何知道输入流何时到达一行中的最后一个单词
- 字符串流重复最后一个单词
- 最后一个单词在文本文件C++中重复
- 最后一个单词在jni中被剪掉/截断
- 在一行最后一个单词之后立即退出While循环
- C++:为什么 getline() 不打印输入字符串的最后一个单词?
- Boost正则表达式拆分未命中最后一个单词
- 从使用sstream读取的单词中删除最后一个空格的最佳方法