关注
您的代码中有几个需要修改的地方,主要是关于使用 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 结合适当的转换或适配器)来实现,但上述解决方案更加简单和直接。
点赞
相关推荐
06-04 10:32
安徽大学 单片机 实习僧和BOSS直聘都投了几十家,硬件开发,硬件测试,嵌入式都投了,全是已读不回……我现在考虑想在秋招前速成一个Linux项目,其实现在完全不知道自己要找什么方向的,只能海投了,求大佬们给点意见😭😭😭
西工程小巴:数电课设+数字信号处理课设+微机原理课设?

点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 如何准备秋招 #
9273次浏览 164人参与
# 软开人,秋招你打算投哪些公司呢 #
100534次浏览 944人参与
# 现代汽车前瞻技术研发急速编程挑战赛 #
21643次浏览 184人参与
# 你觉得实习能学到东西吗 #
13625次浏览 333人参与
# 每个月的工资都是怎么分配的? #
12833次浏览 284人参与
# 实习,不懂就问 #
25556次浏览 402人参与
# 秋招什么时候开投比较合适? #
5546次浏览 124人参与
# 你觉得现在还能进互联网吗? #
4108次浏览 97人参与
# 预测一下26届秋招形势 #
21222次浏览 218人参与
# 技术岗笔试题求解 #
75319次浏览 974人参与
# 聊聊你的职场新体验 #
161189次浏览 1391人参与
# 你最近一次加班是什么时候? #
67672次浏览 346人参与
# 高考出分的那一天,我__ #
14620次浏览 245人参与
# 打工人的精神状态 #
53545次浏览 973人参与
# 机械实习一天多少钱合适? #
28765次浏览 176人参与
# 米哈游工作体验 #
17565次浏览 116人参与
# 非技术岗简历怎么写 #
216543次浏览 2915人参与
# 你们公司几号发工资 #
18747次浏览 118人参与
# 你觉得实习只能是打杂吗? #
192082次浏览 1213人参与
# 来聊聊你认为的薪资天花板是哪家? #
30707次浏览 174人参与
# 安利/避雷我的专业 #
75876次浏览 522人参与