查找字符串中的最后一个单词

时间:2017-12-07 06:19:15

标签: c++

我试图返回字符串中的最后一个单词,但是遇到了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;
}

2 个答案:

答案 0 :(得分:3)

我正在编写另一个解决方案,直到我回来查看评论;他们非常有帮助。此外,来自@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);
}

答案 1 :(得分:1)

其他答案告诉你什么是错的,尽管你也应该知道为什么这是错的。

通常,在循环条件中使用无符号值类型时应该非常小心。比较像std::size_t这样的无符号类型和有符号类型(如常量-1),会导致有符号转换为无符号类型,因此-1成为最大可能std::size_t int }值。

如果在代码中放置一些打印语句,您会注意到实际上从未输入过循环,因为条件总是为假。在执行算术时使用<a href="/room?nw=" + nw ><button type="button" class="btn btn-primary btn-xs">Add</button></a> ,尤其是在将带符号的数字与。

进行比较时