10815 - Andy's First Dictionary

题目:10815 - Andy's First Dictionary


题目大意:将题目所给的text 里的单词按ASCALL码的顺序排序输出;


解题思路:输入一个字符先转换成小写的,再判断是否为字母,是字母的话就存在word【i】里面的数组里(i代表单词的下标),下一个如果不是字母而且前一个是字母就认为之前存储的是单词,则加上‘\0’;

最后排序用到sort(char * t, char * t+N, cmp);头文件:<algorithm> + using namespace std ;注意日记里会有空白行,空白行存在单词里就不要输出;还有不要用gets(),因为文档里只有最后会有'\0',而gets()是以‘\0’结束输入;sort()时间开销会比较大,只要最后调用一次就行了;word【N】,N要设大些,不然会出现RE错误;



#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;


const int N = 5005;
const int M = 205;
char ch;
int x = 0;
int i = 0, j = 0;
bool bo = 0;

struct WORD {
	char data[M];
} word[N*M];

void change() {

		if (ch >= 'A' && ch <='Z')
			ch += 32;

}

bool cmp(const WORD & a, const WORD & b) {

	if(strcmp(a.data,b.data) < 0)
		return true;
	return false;
}
void take () {

		if (ch >= 'a' && ch <='z') {
			bo = 1;
			word[x].data[j++] = ch;
		}
		else  {
			
			if (bo) {
				word[x].data[j] = '\0';
				x++;	
				j = 0;
				bo = 0;
			}
			
		}
}
int main() {

		memset(word, 0, sizeof(word));
	while ((ch = getchar()) != EOF) {
		change();
		take();
	}
	sort(word,word+x,cmp);
	for (int i = 0; i < x; i++) {
		
		if(strcmp(word[i-1].data,word[i].data) != 0) {
			
			if(strcmp(word[i].data,""))
			puts(word[i].data);
		}
	}
	return 0;
}


你可能感兴趣的:(10815 - Andy's First Dictionary)