http://acm.hdu.edu.cn/showproblem.php?pid=2072

这道题从学习c语言开始,就见到,刚开始总觉得字符串处理是一个很繁琐的事,这2天下定决心要切掉它,看别人都是用c++库函数写的,但自己刚学c++,基本的语法关键字还不懂,又阿辉曾说我的的c语言代码能力很弱,(自己也感觉到了),就想着用c写,提高一下能力。

通过本题学习到了关于字符串的相关知识和思想,感觉还是挺有收获的!

这也是第一次写代码一次性过,感觉很不错……

Problem : 2072 ( 单词数 )     Judge Status : Accepted
RunId : 3081414    Language : G++    Author : rll
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
代码
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4  #define N1 2000
5  #define N2 1000
6 int main()
7 {
8 char a[N1],str[N2][20];
9 int i,j,k,l1,pa,n,count,c[N2];//C[]作为标记数组,记录出现过1次的单词标记为1,2次以上的标记为0
10 while(gets(a))
11 {
12 if(strcmp(a,"#")==0)
13 break;
14 l1=strlen(a);n=0;pa=0;
15 //将单词存到一个二维数组里
16 for(i=0;i<=l1;i++)
17 {
18 if(a[i]==' '||a[i]=='\0')//注意多个空格的情况
19 {
20 if(a[i-1]==' ')
21 {
22 pa++;
23 continue;
24 }
25 else
26 {k=0;
27 for(j=pa;j<i;j++)
28 str[n][k++]=a[j];
29 str[n][k]='\0';//这点很关键
30 n++;
31 pa=i+1;
32 }
33 }
34 }
35 //合并单词处理c
36 for(i=0;i<n;i++)
37 c[i]=1;
38 for(i=0;i<n;i++)
39 {
40 if(c[i]==0)
41 continue;
42 else
43 {
44 for(j=i+1;j<n;j++)
45 {
46 if(c[j]==0)continue;
47 if(strcmp(str[i],str[j])==0)
48 c[j]=0;
49 }
50 }
51 }
52 count=0;
53 for(i=0;i<n;i++)
54 if(c[i]==1)
55 count++;
56 printf("%d\n",count);
57 }
58 return 0;
59 }
60

 

posted on 2010-10-17 19:19  role  阅读(3236)  评论(13编辑  收藏  举报