#include<iostream>
#include<string>
//#include<bits/stdc++.h>
//#include<cstring>
using namespace std;
//翻转字符串(指定左右边界)
void ReverseStr(string & str,int left,int right){
if(left>right)return;
for(int i=left,j=right;i!=j&&i<j;++i,--j){
swap(str[i],str[j]);
}
}
//输出字符串(指定左右边界)
void OutStr(string & str,int left,int right){
for(int i=left;i<=right;i++){
cout<<str[i];
}
cout<<endl;
}
//翻转字符串(以空格为界)
void ReverseSpa(string & str){
int n=str.size(),i,k=0;
for(i=0;i<n;i++){//翻转空格前字符串
if(str[i]==' '){
ReverseStr(str,k,i-1);
k=i+1;
}
}
if(k<n)ReverseStr(str,k,n-1);//翻转空格后字符串
}
int main()
{
string str="who are you!";
ReverseSpa(str);
OutStr(str,0,str.size()-1);
return 0;
}
我的思路(string实现):
1.找空格位置;
2. 翻转空格前字符串;
3.翻转空格后字符串;
其他思路(char[]实现):
1.游标不指向空格时:空格前字符赋给临时字符数组;
2. 游标指向空格时:输出临时字符串;