关注
您的代码中有几个需要修改的地方,主要是关于使用 C++20 引入的 std::views::reverse 视图和如何正确地从字符串中反向遍历以找到最后一个单词的长度。std::views::reverse 是 C++20 标准库中的一部分,它返回一个反向视图,但您需要确保您的编译器支持 C++20 并且正确地设置了编译选项。
然而,std::views::reverse 返回的是一个反向视图,而您试图直接在范围 for 循环中使用这个视图遍历字符,这实际上并不直接可行,因为您还需要对字符进行迭代。您可以通过 std::views::transform 来转换字符,但在这个场景下,更简单的解决方案是使用 std::string::rbegin() 和 std::string::rend() 来反向迭代字符串。
以下是修改后的代码:
cpp
#include <iostream>
(30316)#include <string>
using namespace std;
int main()
{
string s;
getline(cin, s);
size_t lastWordLen = 0;
bool inWord = false; // 用于标记是否处于单词中
for (auto it = s.rbegin(); it != s.rend(); ++it) {
if (*it == ' ') {
if (inWord) {
// 如果之前处于单词中,现在遇到空格,则结束循环
break;
}
} else {
inWord = true; // 遇到非空格字符,标记为在单词中
++lastWordLen;
}
}
cout << lastWordLen << endl;
return 0;
}
这个修改后的版本使用了字符串的反向迭代器 std::string::rbegin() 和 std::string::rend() 来从后向前遍历字符串。我们还增加了一个布尔变量 inWord 来跟踪是否正在处理一个单词。当遇到空格且 inWord 为 true 时,我们知道已经找到了最后一个单词的末尾,可以结束循环。
注意:如果您的编译器不支持 C++20 或您不想使用范围库,这种方法是一个很好的替代方案。如果您的编译器支持 C++20 并且您更喜欢使用现代 C++ 特性,您可以通过其他方式(如使用 std::views::reverse 结合适当的转换或适配器)来实现,但上述解决方案更加简单和直接。
点赞
相关推荐
点赞 评论 收藏
分享
10-10 18:54
北京航空航天大学 机械设计/制造 点赞 评论 收藏
分享
牛客热帖
正在热议
# 拼多多求职进展汇总 #
235828次浏览 2038人参与
# ai智能作图 #
25666次浏览 299人参与
# 北方华创开奖 #
66634次浏览 550人参与
# 25届秋招总结 #
405011次浏览 4061人参与
# 25届机械人为了秋招做了哪些准备? #
25845次浏览 361人参与
# 地方国企笔面经互助 #
6782次浏览 16人参与
# 阿里云管培生offer #
61241次浏览 1755人参与
# 机械求职避坑tips #
23061次浏览 247人参与
# 实习,投递多份简历没人回复怎么办 #
2438492次浏览 34727人参与
# 软件开发投递记录 #
1480322次浏览 23940人参与
# 我的实习求职记录 #
6128277次浏览 83999人参与
# 我在牛爱网找对象 #
74656次浏览 554人参与
# 机械人怎么评价今年的华为 #
157583次浏览 1350人参与
# 歌尔求职进展汇总 #
42852次浏览 294人参与
# 如果再来一次,你还会选择这个工作吗? #
113831次浏览 1130人参与
# 你觉得通信/硬件有必要实习吗? #
54675次浏览 695人参与
# 如何写一份好简历 #
618460次浏览 8721人参与
# 在职场上,你最讨厌什么样的同事 #
5926次浏览 90人参与
# 如果可以,你希望哪个公司来捞你 #
32980次浏览 193人参与
# 虾皮求职进展汇总 #
87717次浏览 705人参与
# 硬件兄弟们 甩出你的华为奖状 #
78339次浏览 628人参与
# 你觉得第一学历对求职有影响吗? #
17644次浏览 154人参与