当前位置: 首页 > news >正文

B2122 单词翻转

记录27

#include <bits/stdc++.h>
using namespace std;
int main(){string s="",st="";getline(cin,s);for(int i=0;i<=s.size();i++){if(s[i]==' '||s[i]=='\0'){for(int j=st.size()-1;j>=0;j--) cout<<st[j];cout<<endl;st="";}st+=s[i];}return 0;
}

突破点

写单词的时候喜欢反着写,比如 hello 他会写成 olleh

将所有的单词复原

每个单词一行。

思路

先接收输入,然后以空格为标准来进行切割,接着每切割一段就倒序输出,然后换行输出下一段

代码简析

#include <bits/stdc++.h>
using namespace std;
int main(){string s="",st="";getline(cin,s);......return 0;
}

s用来接收输入的数据,st用来存放每一段

但是因为有空格,所以需要用到getline()getline()的介绍会放在补充部分

#include <bits/stdc++.h>
using namespace std;
int main(){string s="",st="";getline(cin,s);for(int i=0;i<=s.size();i++){......st+=s[i];}return 0;
}

将字符依次存储在st

#include <bits/stdc++.h>
using namespace std;
int main(){string s="",st="";getline(cin,s);for(int i=0;i<=s.size();i++){if(s[i]==' '||s[i]=='\0'){for(int j=st.size()-1;j>=0;j--) cout<<st[j];cout<<endl;st="";}st+=s[i];}return 0;
}

在切割单词后,对每一段进行切割并且倒序输出

注意:最后一个\0表示结束的最后一段不要忘记输出

做法2:使用reverse()函数

reverse()函数放在文章的补充部分

while(cin>>s) 来实现。这句话的意思是:在获取 Ctrl+Z 时一直输入字符串 s(评测机会自动输入 Ctrl+Z

#include<bits/stdc++.h>
using namespace std;
int main(){string s;while(cin >> s){reverse(s.begin(), s.end());cout << s << endl;}return 0;
}

补充

1. char 数组和 std::string 的 getline() 输入

1.1 char 数组的 getline() 输入

std::getline 可以用于从输入流中读取一行数据,并存储到 char 数组中。这需要指定数组的最大长度,以避免缓冲区溢出。

语法

std::istream& getline(std::istream& is, char* s, std::streamsize n);
  • is:输入流,通常是 std::cin

  • s:字符数组,用于存储读取的字符串。

  • n:字符数组的最大长度。

示例代码

#include <iostream>
using namespace std;int main() {char s[100]; // 定义一个足够大的字符数组cout << "请输入一行文本:";getline(cin, s, 100); // 从标准输入读取一行文本cout << "输入的文本是:" << s << endl;return 0;
}
输出结果

请输入一行文本:Hello, World!
输入的文本是:Hello, World!

1.2 std::string 的 getline() 输入

std::getline 也可以用于从输入流中读取一行数据,并存储到 std::string 中。std::string 会自动管理内存,因此不需要指定最大长度。

语法

std::istream& getline(std::istream& is, std::string& s);
  • is:输入流,通常是 std::cin

  • sstd::string 对象,用于存储读取的字符串。

示例代码

#include <iostream>
#include <string>
using namespace std;int main() {string s;cout << "请输入一行文本:";getline(cin, s); // 从标准输入读取一行文本cout << "输入的文本是:" << s << endl;return 0;
}
输出结果

请输入一行文本:Hello, World!
输入的文本是:Hello, World!

1.3 注意事项

  • char 数组:需要指定数组的最大长度,以避免缓冲区溢出。

  • std::string:自动管理内存,不需要指定最大长度。

  • 空格和换行符std::getline 会读取整行输入,包括空格,但不会读取换行符。

2. std::reverse() 函数

2.1 定义

std::reverse 是 C++ 标准库中的一个函数,用于反转容器中的元素。它定义在 <algorithm> 头文件中。

2.2 语法

void reverse(BidirectionalIterator first, BidirectionalIterator last);
  • first:指向容器开始的迭代器。

  • last:指向容器结束的迭代器。

2.3 示例代码

示例1:反转 std::string

#include <iostream>
#include <string>
#include <algorithm> // 包含 reverse 函数
using namespace std;int main() {string s = "Hello, World!";reverse(s.begin(), s.end()); // 反转字符串cout << "反转后的字符串是:" << s << endl;return 0;
}
输出结果
反转后的字符串是:!dlroW ,olleH
示例2:反转 char 数组

#include <iostream>
#include <algorithm> // 包含 reverse 函数
using namespace std;int main() {char s[] = "Hello, World!";reverse(s, s + sizeof(s) - 1); // 反转字符数组,注意排除最后一个空字符cout << "反转后的字符串是:" << s << endl;return 0;
}
输出结果
反转后的字符串是:!dlroW ,olleH

2.4 注意事项

  • std::reverse:可以反转任何支持双向迭代器的容器,如 std::stringstd::vectorstd::array 等。

  • char 数组:需要指定数组的大小,注意排除最后一个空字符。

  • std::string:自动管理内存,不需要指定大小。

3. 总结

  • char 数组的 getline() 输入:需要指定数组的最大长度,以避免缓冲区溢出。

  • std::stringgetline() 输入:自动管理内存,不需要指定最大长度。

  • std::reverse() 函数:用于反转容器中的元素,支持双向迭代器的容器。

http://www.dtcms.com/a/523692.html

相关文章:

  • Tailwind CSS Next.js实战(官方)Tailwind Demo、Tailwind教程
  • 建设个人博客网站做网站页面设计报价
  • 告别显卡焦虑:Wan2.1+cpolar让AI视频创作走进普通家庭
  • 浙人医创新开新篇——用KingbaseES数据库开创首个多院区异构多活容灾架构
  • openstock部署
  • 平替 MongoDB 实践指南 | 金仓多模数据库助力电子证照系统国产化改造
  • android三方调试几个常用命令
  • 响应式网站建设开发公司网站名称需要备案吗
  • 凡科建站平台有一个外国网站专门做街头搭讪
  • 会计与电子商务:中专生的专业选择与发展路径
  • 什么是站点服务器?
  • 自助建站和速成网站合肥公司网站建设多少费用
  • 【麒麟桌面系统】V10-SP1 2503 系统知识——Umi-OCR⽂字识别⼯具
  • macOS 常用命令速查手册
  • Mac 安装neo4j(解压版)最新版本教程
  • 使用Python实现MCP协议Streamable HTTP详细教程
  • JMeter测试HTTP GET(附实例)
  • 保定网站建设系统wordpress 后台速度优化
  • 【OS笔记21】:处理机调度3-进程调度
  • Flutter中Key的作用以及应用场景
  • linux ubuntu 报错findfont: Font family ‘Times New Roman‘ not found.
  • 基于单片机的滴速液位输液报警系统
  • 如何通过 C# 高效读写 Excel 工作表
  • 【final、finally和 finalize的区别】
  • JVM直接内存和堆内存比例如何设置?
  • Spring Boot 启动时,JVM 是如何工作的?
  • 个性化网站建设开发李沧建网站公司
  • 益品康丰集团:以科技重塑康养未来,让健康触手可及
  • 华为Watch GT 6:运动与科技的完美融合
  • 微算法科技(NASDAQ MLGO)开发基于区块链的差分优化联邦增量学习算法,提高机器学习的性能与安全性