思想很简单,接收字符串,然后写个函数,遍历字符串,遇到空格或者遇到串为就逆序输出。
下面是代码:
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
void output_the_right_string(string str);
int main()
{
string str;
int n;
cin>>n;
getchar();
while(n--)
{
getline(cin,str);
output_the_right_string(str);
}
}
void output_the_right_string(string str)
{
int i;
int j;
int mark;
for(i=0;i<str.size();++i)
{
mark = i;//用来标记j减到多少
for(;i<str.size();++i)//遇到串尾
{
if(str[i] == ' ')//或者遇到空格,就退出循环,然后逆序输出,直到j
break;
}
for(j=i-1;j>=mark;--j)
{
cout<<str[j];
}
i==str.size()?:cout<<" ";//这里不知道为什么,试出来的,;;老是PE
}cout<<endl;
}
接着又看了一个高手写的代码,顿时泪流满面啊。。。
大神的想法是边接收输入,边处理。而不是像我一样接收完了,再来处理
下面是大神的代码:
#include<stdio.h>
#include<string.h>
int main()
{
int t;
char ch;
scanf("%d\n",&t);
while(t--)
{
char s[1005]={};
while(scanf("%[^ \n]",s)!=EOF)//遇到文件尾结束循环 (即一行待处理的字符串)
{//又因为scanf是遇到空格结束输入,所以每次只接收一个单词
printf("%s",strrev(s));//将该单词反转
//s[0]=0;//必须的,如果是输入ekil空格回车 如果没有这行就会输出like ekil回车
ch = getchar();
putchar(ch);
if (ch == '\n')//遇到回车,结束循环
break;
}
}
return 0;
}
不过该代码好像不能AC,好像说什么没strrev这个函数