在字符串中找到最后一个单词

Finding last word in a string

本文关键字:最后一个 单词 字符串      更新时间:2023-10-16

我正在尝试返回字符串中的最后一个单词,但是在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,尤其是将签名数字与。

进行比较时使用