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() 函数:用于反转容器中的元素,支持双向迭代器的容器。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值