问:输入一个字符串,以单词为单位,逆转输出
例:i love you 逆转输出后:you love i
思路:先将字符串整体逆转,然后再以单词字符逆转
下面是代码:
#include <iostream>
#include <Windows.h>
#include <string>
// 输入一个字符串,以单词为单位,逆转输出
// i love you ==> you love i
// 思路:先将字符串整体逆转,然后再以单词字符逆转
using namespace std;
int main(void) {
string str;
char ret; // 用以字符调换的第三者
int i, j; // i 是头下标, j 是尾下标
cout << "请输入一个字符串:";
getline(cin, str);
// 字符串整体逆转
for (i=0,j=str.length()-1; i<j; i++,j--) {
ret = str[j];
str[j] = str[i];
str[i] = ret;
}
int length = str.length();
i=0;
j=0;
// 单词里的字符逆转
while (str[i]) {
while (str[i] == ' ') {
// 如果i 指向了最后一个字符,goto跳转
if (i == length-1) {
goto print;
}
// i 和 j 同时指向了第一个单词的首字符
i++;
j++;
}
while (str[j] != ' ' && str[j] != '\0') j++; // j 指向单词后面的第一个空格
int k1 = i;
int k2 = j-1; // 对应上一条注释,j-1对应单词的尾字符
// 单词里的字符逆转
for (; k1<k2; k1++,k2--) {
ret = str[k1];
str[k1] = str[k2];
str[k2] = ret;
}
i = j; // i 和 j 指向单词后面的第一个空格
}
system("pause");
return 0;
print:
cout << str << endl;
system("pause");
return 0;
}
/ 小编还是初学c++的萌新,对于string字符串的用法还不是很懂,如果哪位大牛还有更简便的方法做出来,或者代码有哪些地方还有bug,请留言更正,不喜勿愤,谢谢! /