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; } }
// 声明:本代码仅供学习之用,请不要作为个人的成绩提交。 // http://blog.csdn.net/mskia // email: [email protected]
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; }

|