Problem:
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
Solution:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
void reverseString( string &str ) {
int len = str.length( );
for ( int i = 0 , j = len - 1; i < j; ++i , --j ){
char ch = str[ i ];
str[ i ] = str[ j ];
str[ j ] = ch;
}
}
// 声明:本代码仅供学习之用,请不要作为个人的成绩提交。
// email: bitrain@hotmail.com
int main( void ){
string str , temp;
int n , m;
vector< string > holdIt;
cin >> n;
for ( int i = 0; i < n ; ++i ) {
cin >> m;
getline( cin ,str ,'\n' );
for ( int j = 0; j < m ; ++j ) {
getline( cin ,str ,'\n' );
int front = 0 , back = front;
while ( back < str.length( ) ) {
while( str[ back ] == ' ' ) {
++back ;
}
front = back++ ;
for( ; ; ) {
if ( back == str.length( ) || str[ back ] == ' ' ) {
break;
}
++back;
}
temp = str.substr( front , back - front );
reverseString( temp );
holdIt.push_back( temp );
}
for ( int pos = 0; pos < holdIt.size( ) - 1; ++pos ) {
cout << holdIt[ pos ] << " ";
}
cout << holdIt[ holdIt.size( ) - 1 ] << endl;
holdIt.clear( );
}
if ( i != n - 1 ) {
cout << endl;
}
}
return 0;
}