算法训练 单词翻转
这个题我想了一个很麻烦的方法
#include <bits/stdc++.h>
using namespace std;
int main(){
char s[1000];
int i=0,k=0;
int temp[100];//记录每个单词的长度
int sum=0;
for(;s[i]!='\n';i++){
cin>>s[i];
if(s[i]!=' '){
sum++;
}
else{
temp[k]=sum;
k++;
sum=0;
}
}
int flag=0;
int flag1=0;
while(i>=0){
if(flag1){
flag=i-temp[k]-1;
}
flag=i-temp[k];
for(int m=0;m<temp[k];m++){
cout<<s[flag+m];
flag1=1;
}
k--;
cout<<' ';
}
return 0;
}
最后发现答案根本出不来,估计死循环了。。。。。
我的思路是用数组记录每个单词的长度,让后倒序输出
下面给出正确代码
#include <iostream>
#include <cstring>
using namespace std;
int main(){
char a[100];
gets(a);
int len = strlen(a);
int i,j;
for(i = len;i > 0;i--){
a[i] = a[i-1];
}
a[0] = ' '; //给a[0]赋值空格
for(i = len;i >= 0;i--){
if(a[i] == ' '){
j = i+1;
while(j <= len){ //找到一个空格之后,输出空格之前的单词
cout << a[j];
j++;
}
cout << ' '; //输出单词之后输出一个空格
len = i-1; //len的位置就是每个单词的最后一位
}
}
return 0;
}