For each list of words, output a line with each word reversed without changing the order of the words.
This problem contains multiple test cases!
The first line of a multiple input is an integer N, then a blank line followed by N input blocks. Each input block is in the format indicated in the problem description. There is a blank line between input blocks.
The output format consists of N output blocks. There is a blank line between output blocks.
Input
You will be given a number of test cases. The first line contains a positive integer indicating the number of cases to follow. Each case is given on a line containing a list of words separated by one space, and each word contains only uppercase and lowercase letters.
Output
For each test case, print the output on one line.
Sample Input
1
3
I am happy today
To be or not to be
I want to win the practice contest
Sample Output
I ma yppah yadot
oT eb ro ton ot eb
I tnaw ot niw eht ecitcarp tsetnoc
注意格式问题。它说每个案例之间有一个空行。还有第一个输入之后再读取一个空行。
我本来打算用string为参数 实现reverse这个函数。但是不知道为什么string实现不了交换,就改用char了。请指教~~~
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
void reverse(char *a, int i, int j)
{
int t;
t = (i + j) / 2;
char Tmp;
for (; i <= t; i++,j--)
{
Tmp = a[i];
a[i] = a[j];
a[j] = Tmp;
}
}
int main()
{
int t;
int flag = 0;
cin >> t;
getchar();
while (t--)
{
if (flag)
cout << endl;
int n, i;
char str[55];
cin >> n;
getchar();
for (i = 0; i < n; i++)
{
gets(str);
int j, k = 0;
for (j = 0; j <= strlen(str); j++)
{
if (str[j] == ' ' || j==strlen(str))
{
reverse(str, k, j - 1);
k = j + 1;
}
}
puts(str);
}
flag = 1;
}
return 0;
}
另外一种方法,用stack类来做!
#include <iostream>
#include <string>
#include <string.h>
#include <stdio.h>
#include <stack>
using namespace std;
int main()
{
int t,flag=0;
cin >> t;
getchar();
while (t--)
{
if (flag)
cout << endl;
int i,n;
cin >> n;
getchar();
for (i = 0; i < n; i++)
{
int j,flag2=0;
string str;
char st;
getline(cin, str);
stack <char> s;
for (j = 0; j <= str.length(); j++)
{
if (str[j] != ' '&&str[j]!='\0')
s.push(str[j]);
else
{
if (flag2)
cout << " ";
while (!s.empty())
{
cout<<s.top();
s.pop();
}
flag2 = 1;
}
}
cout << endl;
}
flag = 1;
}
return 0;
}