我试图返回字符串中的最后一个单词,但是遇到了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;
}
答案 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>
,尤其是在将带符号的数字与。