Google code jam: Problem B. Reverse Words

2631 단어
Problem
Given a list of space separated words, reverse the order of the words. Each line of text contains  L  letters and  W  words. A line will only consist of letters and space characters. There will be exactly one space character between each pair of consecutive words.
Input
The first line of input gives the number of cases, N. N test cases follow. For each test case there will a line of letters and space characters indicating a list of space separated words. Spaces will not appear at the start or end of a line.
Output
For each test case, output one line containing "Case #x: "followed by the list of words in reverse order.
Limits
Small dataset
N = 5 1 ≤ L ≤ 25
Large dataset
N = 100 1 ≤ L ≤ 1000
Sample
Input 
Output  3
this is a test
foobar
all your base
Case #1: test a is this
Case #2: foobar
Case #3: base your all

내 코드:
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
//#define SMALL
#define LARGE
void main()
{
#ifdef SMALL
	freopen("B-small-practice.in","r",stdin);
	freopen("B-small-practice.out","w",stdout);
#endif

#ifdef LARGE
	freopen("B-large-practice.in","r",stdin);
	freopen("B-large-practice.out","w",stdout);
#endif
	string re_Line[1000];
	int N;
	cin>>N;
	char t;
	getchar(t);//No.1
	for(int i=0;i<N;i++)
	{
		string Line;
		char temp[1000];
		getline(cin,Line);//No.2
		int k=0,start=0;
		for(int j=0;j<Line.size();j++)
		{
			temp[j-start]=Line[j];
			if(Line[j]==' ')
			{
				temp[j-start]='\0';
				start=j+1;
				re_Line[k] = temp;
				k++;
			}
			if(j==Line.size()-1)
			{
				temp[j-start+1]='\0';
				re_Line[k] = temp;
				k++;
			}
		}
		cout<<"Case #"<<i+1<<": ";
		for(int count=k-1;count>=1;count--)
		{
			cout<<re_Line[count]<<' ';
		}
		cout<<re_Line[count]<<endl;
		
	}	
}

이 문제는 주로 문자열에 대한 처리를 고찰한다.내 코드에 C++ 표준 라이브러리 헤더 파일로 정의된string 클래스를 사용했습니다.대략적인 사고방식은 getline () 함수를 이용하여 줄을 바꿀 때까지 읽는 것이다.그러나 이전에 N을 입력했을 때 버퍼에 줄 바꾸기 문자를 남겼다.getline () 을 직접 사용하면 줄 바꾸기를 만나면 끝납니다. 빈 문자열을 얻을 수 있습니다.그래서 No.1에 getchar () 를 사용하여 버퍼를 비웠습니다.그리고 줄마다 문자열을 읽습니다.읽은 후에 이 문자열을 옮겨다니고 빈칸이 있으면 처리합니다.그리고 맨 뒤의 문자는 빈칸이 없다.조심해.
C++ 표준 라이브러리에 대한 헤더 파일이 없습니다.h의, C 표준 라이브러리에서 계승된 헤더 파일은 앞에서 c를 추가할 수 있다. 예를 들어ctype.h는 C++ 표준 라이브러리에서cctype입니다.그리고 C++ 표준 라이브러리는 이 헤더 파일의 이름 공간 std를 설명해야 합니다

좋은 웹페이지 즐겨찾기