单词逆序

Description:

Sakeven 正在对一段文字进行加密,规则如下:
把字符串中的每个单词进行逆序,比如 acm 变成 mca,其他字符顺序不变。
但是这个工作让他一个手写太麻烦啦,于是他想请你写个程序帮助他。

Input:

输入有包括多组数据。每组数据包括一行字符串。
eg:I Love You !

Output:

输出加密后的字符串。
eg:I evoL uoY !

我的思路就是根据空格将每个单词分开,然后每个单词reverse后输出。这个方法有很多漏洞,需要分类判断遇到的非字母字符是“ ”还是标点符号。学到了一个string的函数:s = str.substr(begin, count); 这样s中就存了str从begin开始的count长的字符串。字符串函数详解
参考了别人的代码,发现运用了队列的思想,十分简洁。遍历字符串的字符:如果是字母,加入辅助字符串的头部(头插法);不是字母(是空格或者标点符号),输出助字符串和此非字母字符,并清空辅助字符串。防止结尾是以字母结束的,最后输出一下辅助字符串。参考的别人的ac代码:

#include <iostream>
#include <string>
using namespace std;

int main() {
	string str;
	while (getline(cin, str)) {
		string s;//辅助字符串,每个样例一个
		for (int i = 0; i < str.size(); ++i) {
			if (isalpha(str[i])) {//是字母
				s = str[i] + s;//加入辅助字符串
			}
			else {//不是字母(是空格或标点符号)
				cout << s << str[i];//输出辅助字符串和此非字母字符
				s.clear();//清空辅助字符串
			}
		}
		cout << s << endl;//防止结尾是以字母结束的
	}
}

我的至今不知道错在哪里的代码(有没有大佬帮我看一下错哪里了/(ㄒoㄒ)/~~):

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;

int main() {
	string str;
	while (getline(cin, str)) {
		int count = 0;
		string s;
		for (int i = 0, begin = 0; i < str.size(); ++i) {
			if (str[i] != ' ' && isalpha(str[i])) {
				count++;
			}
			if (str[i] == ' ' || i == str.size() - 1) {
				s = str.substr(begin, count);
				reverse(s.begin(), s.end());
				cout << s;
				begin = i + 1;
				count = 0;
			}
			if (!isalpha(str[i])) {
				cout << str[i];
				continue;
			}
		}
		cout << endl;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值