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。
s:std::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 ,olleH2.4 注意事项
std::reverse:可以反转任何支持双向迭代器的容器,如std::string、std::vector、std::array等。
char数组:需要指定数组的大小,注意排除最后一个空字符。
std::string:自动管理内存,不需要指定大小。3. 总结
char数组的getline()输入:需要指定数组的最大长度,以避免缓冲区溢出。
std::string的getline()输入:自动管理内存,不需要指定最大长度。
std::reverse()函数:用于反转容器中的元素,支持双向迭代器的容器。
