终于独立实现了一个一般难度的题目 记录一下
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
int main(void) {
string str;
int i;
int j;
int k1,k2;
char tmp;
cout << "请输入字符串" << endl;
getline(cin,str);
i = 0;
j = str.length() - 1;
//cout << str.length() << endl;
while (i < j) { //这段程序实现的是整体逆转 比如123 456->654 321
tmp = str[i];
str[i] = str[j];
str[j] = tmp;
i++;
j--;
}
i = 0;
while (i < str.length()) {//取用数组下标的时候,下标需要小与长度一个
while (str[i] == ' '&& i < str.length()) i++;//跳过空格 i<长度 是防止越界
k1 = i; //这个while结束条件是 str[i]不是空格,而是单词的第一个字符
while (str[i] != ' '&& i < str.length()) i++;
k2 = i - 1;
//i-1的原因是 最后一次执行while时str[i]代表最后单词的最后一个字母 然后i进行了自增
//这个时候str[i]已经走到了空格的位置,我们想实现的是单词逆转,故而需要让str[i]回到最后一个字母,所以减去1
for (; k1 < k2; k1++, k2--) {//单纯的逆转 很简单
tmp = str[k1];
str[k1] = str[k2];
str[k2] = tmp;
}
}
cout << str << endl;
return 0;
}