user-0 提问: 【新手】如何在一个打开的文本文件中实现按照单词长度统计单词个数的功能呢

回复:
user: user-1
content: 引用 6 楼 bjym1987 的回复:引用 5 楼 zhao4zhong1 的回复:万一一个单词长度是4GB呢？找老湿嗯弄个4GB的单词长度，不怕别人追杀你么. http://bbs.csdn.net/topics/360055953

user: user-2
content: 引用 5 楼 zhao4zhong1 的回复:万一一个单词长度是4GB呢？找老湿嗯弄个4GB的单词长度，不怕别人追杀你么.

user: user-1
content: 万一一个单词长度是4GB呢？

user: user-0
content: 引用 2 楼 r_Jimy 的回复:上面代码测试输出如下（其中类似X3J11,(X3)含非字母组合做了过滤，楼主看需要调整）： 该文本内容如下： The standard was developed by the X3J11 Technical Committee on the[3]the C Programming Language under project 381-D by American National[8]Nationa Standards Committee on Computers and Information Processing (X3).  上述文本中空白的数目:25  上述文本中字符的数目:169  上述文本中段落的数目:4  上述文本中单词的数目:25  长度      个数     1       1     2       4     3       5     4       0     5       1     6       0     7       1     8       4     9       6    10       1    11       2    12       0    13       0    14       0    15       0    16       0    17       0    18       0    19       0    20       0 由于是新手，所以问一下给出代码中的assert是个什么东西= =|| 还有打开的文件每个段落后面会多出来的类似[8]National，[3]the是怎么回事呢。可不可以去掉他们呢？ 啊。。还有。。中文全部崩掉了呢= =||

user: user-3
content: 上面代码测试输出如下（其中类似X3J11,(X3)含非字母组合做了过滤，楼主看需要调整）： 该文本内容如下： The standard was developed by the X3J11 Technical Committee on the[3]the C Programming Language under project 381-D by American National[8]Nationa Standards Committee on Computers and Information Processing (X3).  上述文本中空白的数目:25  上述文本中字符的数目:169  上述文本中段落的数目:4  上述文本中单词的数目:25  长度      个数     1       1     2       4     3       5     4       0     5       1     6       0     7       1     8       4     9       6    10       1    11       2    12       0    13       0    14       0    15       0    16       0    17       0    18       0    19       0    20       0

user: user-3
content: 统计方法跟你后面提供的有所不同，供你参考  #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h>  FILE *fp; #define MAX_WORD_LEN 20  void main() {     int zifu=0,danci=0,kongbai=0,duanluo=0;     char ch;     char fname[1000];     char countArr[MAX_WORD_LEN]={0};     char chLen=0;     char chStr[21]={0};     int  i;     char wordTag = 1;//ÓÃÓÚ¹ýÂÇ·Çµ¥´Ê×éºÏ£¬Ä¿Ç°Ö»ÈÏÎª´¿×ÖÄ¸×éºÏÎªµ¥´Ê           printf("ÇëÊäÈëÐèÒª´ò¿ªµÄÓ¢ÎÄÎÄ±¾ÎÄ¼þÃû£º\n(×¢£ºÓ¦µ±°üº¬ÍêÕûÂ·¾¶)\n");     scanf("%s",fname);     if((fp=fopen(fname,"r"))==NULL)     {         printf("ÎÄ¼þ²»´æÔÚ£¡\n");         exit(0);     }     ch=fgetc(fp);     printf("\n¸ÃÎÄ±¾ÄÚÈÝÈçÏÂ£º\n");          while(ch!=EOF)     {     	if (ch>='A'&&chLen<='Z'||ch>='a'&&ch<='z') 	    { 	    	chStr[chLen]=ch; 	    	chLen++; 	    	assert(chLen<=MAX_WORD_LEN); 	    } 	    else if (ch !=' '&&ch!=10&&ch!=13) 	    { 	    	wordTag = 0; 	    }     	 	    if(ch==' ') 	    { 	    	if (chLen>0) 	    	{ 	    		if (wordTag) 	    		{ 		    		countArr[chLen-1]++; 		    		chStr[chLen]='\0'; 		    		//printf("[%d]%s ",chLen,chStr); debug 		    		danci++; 	    		} 	    		else 	    		{ 	    			wordTag = 1; 	    		} 	    		 	    		chLen = 0; 	    	} 	        kongbai++; 	    } 	    else if((ch>='!'&&ch<='~')) 	        zifu++; 	    else if(ch==10||ch==13) 	    { 	        duanluo++; 	        if (chLen>0) 	    	{ 	    		if (wordTag) 	    		{ 	    			countArr[chLen-1]++; 		    		chStr[chLen]='\0'; 		    		printf("[%d]%s ",chLen,chStr); 		    		danci++; 	    		} 	    		else 	    		{ 	    			wordTag = 1; 	    		} 	    		 	    		chLen=0; 	    	} 	    } 	 	    putchar(ch); 	    ch=fgetc(fp);     }          fclose(fp);     printf("\n\nÉÏÊöÎÄ±¾ÖÐ¿Õ°×µÄÊýÄ¿:%d\n",kongbai);     printf("\nÉÏÊöÎÄ±¾ÖÐ×Ö·ûµÄÊýÄ¿:%d\n",zifu);     printf("\nÉÏÊöÎÄ±¾ÖÐ¶ÎÂäµÄÊýÄ¿:%d\n",duanluo+1);     printf("\nÉÏÊöÎÄ±¾ÖÐµ¥´ÊµÄÊýÄ¿:%d\n",danci);          printf("\n³¤¶È      ¸öÊý\n");     for (i=0;i<MAX_WORD_LEN;i++)     {     	printf(" %4d    %4d\n",i+1,countArr[i]);     }      }

user: user-3
content: assert是断言，调试用，比如你输入文本有中文会触发断言失败，表明该程序不适用中文，如要使用中文需要调整，详细请百度自学 [8]National，[3]the表示National有8个字，the有3个字，这是我用来验证代码是否正确用的 请把下面这行注释掉 printf("[%d]%s ",chLen,chStr);