c++ - 在 C++ 中处理字符串流
问题描述
多年后我完全没有使用它,我正在恢复到 cpp。我正在努力保持最新状态,同时用正确的做法和语法刷新我的记忆,所以我更喜欢将答案倾向于 cpp 17 以后(尽管 20 还没有出来)。
所以我的情况是这样的,假设我有一个 stringstream 对象,我想找到一种有效的方法将其内容转换为大写/小写。然后我会玩它(字符串中的每个偶数字符等)。然而,据我所知,与其他编程语言不同,在 c++ ::toupper/lower 中是在字符上完成的,所以我认为这意味着我需要在这个容器上使用 std::transform。
如果您在回答时可以考虑以下问题,那就太好了,让我用一张网捕捉多只鸟,或者类似的东西:
是否可以使用 for_each 来做到这一点?
如果我不想创建一个新的字符串对象来进行大小写操作,是否可以使用 string_view 然后引用它来对其进行操作?
stringstream 对象有迭代器吗?(如开始(),结束()等)
那么在这里实施案例更改的最佳方法是什么?
是否可以在不将其转换为字符串的情况下以某种方式做到这一点,而是手动操作它,或者它是否会带来麻烦?
这是我尝试过但失败的原因:
int main() {
std::stringstream beginnersmistake;
beginnersmistake<<"learning"<< " " << "to"<< "program" <<'\n';
std::function<std::stringstream> ttoupper = [&beginnersmistake](){
std::string stemp = beginnersmistake.str();
std::transform(stemp.begin(),stemp.end(),stemp.begin(),::toupper);
};
std::cout<<"voila! a mistake comming:" << ttoupper;
beginnersmistake.clear();
getchar();
return 0;
}
非常感谢您帮助新手加入该网站 :)
解决方案
推荐阅读
- c - 使用 fseek 在 C 中重写文件
- spring - 如何有选择地使一个类成为应该在 Spring (Spring Boot 2.x) 中运行的代码
- c++ - C ++将引用传递给同一类中的函数
- node.js - ExpressJS 中间件方法使变量在其他(模块)文件中可用
- c++ - C++如何创建一个不允许模板参数的类模板
- java - Random.nextInt() 返回相同的数字
- windows - 为什么顶级窗口的 GetParent(hwnd) 和 (HWND)::GetWindow(hwnd, GW_OWNER) 会给出不同的结果?
- python - 发现具有特定标准的排列三元组中的可能组合
- javascript - 带有自己的路由文件的 Vue.js + MPA
- java - 范围问题 - 额外添加意图并从 2 个不同的功能开始活动