关注
您的代码中有几个需要修改的地方,主要是关于使用 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 结合适当的转换或适配器)来实现,但上述解决方案更加简单和直接。
点赞
相关推荐
想踩缝纫机的小师弟练...:不是哥们,这是校招吗。。。。。。
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你感受到金三银四了嘛? #
49420次浏览 494人参与
# 美团笔试 #
669721次浏览 4387人参与
# 春招 / 实习投递,你最焦虑的一件事 #
41260次浏览 840人参与
# 今天你投了哪些公司? #
92597次浏览 1781人参与
# 虽然0面试,但今天___,夸夸自己 #
5081次浏览 125人参与
# 拼多多工作体验 #
48645次浏览 300人参与
# 简历无回复,你会继续海投还是优化再投? #
143028次浏览 884人参与
# 为了去实习,我赌上了___ #
68732次浏览 385人参与
# 找工作,你都让AI帮你做什么? #
4489次浏览 163人参与
# 如果给AI员工评绩效,我的答案是…… #
5944次浏览 134人参与
# 哪一刻你对工作祛魅了? #
14447次浏览 137人参与
# 刚工作的你,踩过哪些坑? #
3674次浏览 86人参与
# 实习学不到东西正常吗? #
5647次浏览 87人参与
# 今年找实习到底有多难? #
12311次浏览 123人参与
# AI时代下,你的岗位要求有什么变化? #
6371次浏览 124人参与
# AI项目实战 #
4194次浏览 206人参与
# 校园里的破防时刻 #
38164次浏览 178人参与
# 携程笔试 #
118326次浏览 731人参与
# HR问:你期望的薪资是多少?如何回答 #
83650次浏览 717人参与
# 实习打杂,要跑路吗 #
63860次浏览 350人参与