嗜血魂K

导航

10815 Andy's First Dictionary

因为卡在这个问题,不想去想,颓废了好几天!
终于将其解决,昨天试着做了一道数学杂题,我猜想可能数学杂题难度波动很大,而字符串处理保持中等难度.(仅限于Volume 1)
关于这题,或许能用正则表达式?我也不是很清楚,正准备去查阅资料看下.
//思路:用一数组存储生词,每读入一个单词,就转换为小写,用stcmp函数处理
//具体处理:stcmp返回值<0,则插入在之前;=0则跳过这个单词;>0则比较下一个单词;
//总是WA,决定用getchar();
#include<stdio.h>
#include<string.h>
#include<ctype.h>
const int maxn = 5000;
int main()
{
#ifdef LOCAL
freopen(
"input.txt", "r", stdin);
freopen(
"output.txt", "w", stdout);
#endif
int word_num = 1, pos = 0;
int ok = 0;
char word[maxn][50], buf[50];
char c;
word[
0][0] = '\0';//详细说明下:因为我要先和word[0]这个不确定字符串比较,想来想去,也没找到好都解决方法,所以干脆让word[0]始终排在最前面,我从word[1]开始输出便是
memset(buf,
'\0', 50);
while((c = getchar()) != EOF)
{
if(!isalpha(c)) {
if(ok)
{
for(int i = 0; i < word_num; i++)
{
int state = strcmp(word[i], buf);
if(state > 0) //插入在之前
{
for(int k = word_num; k > i; k--) strcpy(word[k], word[k-1]);
strcpy(word[i], buf);
word_num
++;
break;
}
else if(state == 0) break;
else if(state < 0 && i == word_num-1) //插入在最后
{ strcpy(word[word_num], buf); word_num++; break; }
}
ok
= 0;
pos
= 0;
memset(buf,
'\0', 50);
}}
else { ok = 1; buf[pos++] = tolower(c); }
}
for(int j = 1; j < word_num; j++) printf("%s\n", word[j]);
return 0;
}

  

posted on 2011-07-30 17:57  嗜血魂K  阅读(455)  评论(0)    收藏  举报