#include "stdioh"//
#include "stringh"//
void main(void){
char a[500][20];//={"one","little","two","little","three","little","boys"};
int i,j,k,total=0;
printf("Type a text('' end)\nStr=");
for(i=0;i<500;){
scanf("%s",a[i]);
if(a[i++][0]=='') break;
}
for(j=1;j<i;j++){
for(k=0;k<j;k++)
if(!strcmp(a[j],a[k])) break;
if(k==j) total++;
}
printf("%d\n",total);
}
存在两个问题:
2、单词与单词之间只有标点符号分隔,没有空格,如will,there
建议可使用 char strtok(char s[], const char delim); 函数
例如:
char a[] = "Where there is will, there is a way";char p = strtok(a, " ,!");
int count = 0;
if (p != NULL)
{
++count;
printf("%d:%s\n", count, p);
}
while ((p = strtok(NULL, " ,!")) != NULL)
{
++count;
printf("%d:%s\n", count, p);
}
//包含<stringh> <stdioh> ,代码没有测试过,不一定要采纳我,我是来学习的。
没细看你的代码。据题意,觉得你写复杂了,而且统计了重复单词。下面提供一个作参考……//#include "stdafxh"//vc++60加上这一行
#include "stdioh"
#include "stringh"
#include "stdlibh"
void main(void){
int i,j,word;
char a[1000],b[100][20];
printf("Enter a small article(no punctuation & '#' end)\n");
while(1){
gets(a);
if(a[0]=='#'){
printf("You finished test bye-bye!\n");
break;
}
fflush(stdin);
for(word=i=0;a[i];i++){
if(a[i]<='z' && a[i]>='a' || a[i]<='Z' && a[i]>='A'){
for(j=0;a[i]<='z' && a[i]>='a' || a[i]<='Z' && a[i]>='A';i++,j++)
b[word][j]=a[i];
b[word][j]='\0';
i--;
for(j=0;j<word;j++)
if(!strcmp(b[j],b[word])) break;
if(j<word) continue;
word++;
}
}
printf("%d\n\nDo it again\n",word);
}
}给一个简单的例子:
#include<stdioh>#define N 1000void main(){ char en[N][81]; int i,j,num=0,n,state; //num 用来统计单词的个数 //state 用来记录程序当前是否处于一个单词之中,初值为0,表示不在单词中,值为1,表示正处于在一个单词中
FILE fp;
fp = fopen("intxt", "r");
int n =0;
while(!feof(fp)){ fgets(en[n++], N, fp); //输入英语短文 } for(i=0;i<n;i++){ state=0; //设每行的开始都是单词的开始 for(j=0;en[i][j]!='\0';j++){ if(en[i][j]==' '){ state=0; //判断 en[i][j] 是否为空格字符 } else if(state==0){ state=1; num++; } } } printf("The number of words is %d\n",num);}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)