c语言统计单词个数?1、统计英文文本中单词个数。if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')) sum++;2、统计某一特定单词出现的频度。那么,c语言统计单词个数?一起来了解一下吧。
例1. 统计一个字符串中单词的个数(假定单词之间以空格分隔)。
由于在第一个单词之前有可能没有空格符,因此若仍然采用查找一个单词的开头的方式,实现起来将会不甚方便。不过,可以变换一下思路,改为查找一个单词的末尾。
可以发现,在除了最后一个单词之外的每个单词之后至少有一个空格符,而在最后一个单词之后可能跟一个空格符,也可能直接跟一个空字符'\0',因此可以将判断规则修改为“当相邻的两个字符中,前一个是非空格字符,而后一个是空格符或空字符'\0'时,说明找到一个新的单词”。
源程序:
#include
#include
int main(void)
{char a[200];
int i,n,c=0;
printf("请输入一行以空格分隔的单词:\n");
gets(a);
n=strlen(a);
for(i=0;i<=n-1;i++)
{if(a[i]!=' '&&(a[i+1]==' '||a[i+1]=='\0'))
c++;
/*若第i个字符不是空格符,第i+1个字符是空格符或'\0',则表示找到一个单词的末尾*/
}
printf("单词个数=%d\n",c);
return 0;
}
例2. 统计一个字符串中单词的个数(假定单词之间以空格或标点符号分隔)。
#include#include
#include"string.h"
typedefstruct{
charword[20];
intcount;
}WORD;
intfind(char*source,chartarget)
{
inti,j;
ints_len=strlen(source);
for(i=0;i
{
if(source[i]==target)
{
returni;
}
}
return-1;
}
char*right(char*source,intn)
{
char*buf;
intlen=strlen(source);
buf=(char*)malloc(sizeof(char)*(len-n)+1);
inti,j=0;
for(i=n;i
{
buf[j++]=source[i];
}
buf[j]='\0';
returnbuf;
}
voiddel_double_space(char*s)
{
inti,j=0,len=strlen(s);
for(i=0;i
{
s[j++]=s[i++];
if(s[i]==''&&s[i-1]=='')
{
i++;
}
}
s[j]='\0';
len=strlen(s);
for(i=0;i
{
if(s[i]>='A'&&s[i]<='Z')
{
s[i]=s[i]+32;
}
}
}
char*left(char*source,intn)
{
char*buf;
buf=(char*)malloc(sizeof(char)*n+1);
intlen,i,j=0;
len=strlen(source);
for(i=0;i
{
if(source[i]!='\0')
{
buf[j++]=source[i];
}
else
{
break;
}
}
buf[j]='\0';
returnbuf;
}
voidsort(WORD*w)
{
WORDt;
intcount=0;
inti,j;
for(i=0;i<100;i++)
{
if(w[i].count>0)
{
count++;
}
}
for(i=0;i
{
for(j=0;j
{
if(w[j].count
{
t=w[j];
w[j]=w[j+1];
w[j+1]=t;
}
elseif(w[j].count==w[j+1].count)
{
if(strcmp(w[j].word,w[j+1].word)>0)
{
t=w[j];
w[j]=w[j+1];
w[j+1]=t;
}
}
}
}
}
intmain(intargc,char*argv[])
{
charall[1000]={'\0'};
while(1)
{
strcpy(all,"\0");
printf("\n\n请输入一段英文文字:");
fflush(stdin);
scanf("%[^\n]",all);
WORDword[100];
inti,duan=0,len,count=0;
len=strlen(all);
for(i=0;i<100;i++)
{
strcpy(word[i].word,"\0");
word[i].count=0;
}
for(i=0;i
{
if(all[i]==','||all[i]=='.'||all[i]=='!'||all[i]=='?'||all[i]==';')
{
duan++;
if(i==len-1)
{
all[i]='\0';
}
else
{
all[i]='';
}
}
elseif(i==len-1)
{
duan++;
}
}
del_double_space(all);
while(1)
{
char*buf,*newbuf;
intn;
buf=(char*)malloc(sizeof(char)*20);
newbuf=(char*)malloc(sizeof(char)*1000);
n=find(all,'');
if(n!=-1)
{
buf=left(all,n);
}
else
{
strcpy(buf,all);
}
// printf("\n%s",buf);
intisfind=0;
for(i=0;i
{
if(strcmp(word[i].word,buf)==0)
{
word[i].count=word[i].count+1;
isfind=1;
break;
}
}
if(isfind==0)
{
strcpy(word[count].word,buf);
word[count].count=1;
count++;
}
if(find(all,'')==-1)
{
free(buf);
free(newbuf);
break;
}
newbuf=right(all,n+1);
strcpy(all,newbuf);
free(buf);
free(newbuf);
// printf("\n%s",all);
// getch();
}
sort(word);
printf("\n共有%d句话",duan);
printf("\n共有%d个单词",count);
printf("\n单词词频");
for(i=0;i
{
printf("\n%-10s%d",word[i].word,word[i].count);
}
printf("\n\n是否继续?[y/n]");
charn;
fflush(stdin);
scanf("%c",&n);
if(n=='y'||n=='Y')
{
continue;
}
elseif(n=='n'||n=='N')
{
break;
}
}
return0;
}
#include
#include
void despace(char *s,int *i)
{
while(s[*i]==' ') (*i)++;
}
int main()
{
int count=0,i=0;
char s[50];
char c;
gets(s);
while((c=s[i])!='\0')
{
if(c==' ')
{
despace(s,&i);
count++;
}
i++;
}
count++;
printf("\ncount:%d",count);
getch();
return 1;
}
给你个类似的。你小改下,就应该可以了。希望对你有帮助
/*编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。
例如,假定输入的字符串为:asdasasdfgasdaszx67asdmklo,
子字符串为:as,则应输出6。
[程序分析]
由于小串中只有2个字符所以可用str[i]==sbustr[0]&&str[i+1]==substr[1]来判断小串是否与长串当前位置(str[i])相同(即出现一次)。
因而只要让长串当前位置逐一向后移即可(用for()循环来完成)
*/
//[源程序]
#include"stdio.h"
#include"string.h"
#include"conio.h"
intfun(char*str,char*substr)
{inti,n=0,s=strlen(str);
for(i=0;i
if((str[i]==substr[0])&&(str[i+1]==substr[1]))
n++;
returnn;
}
main()
{
charstr[81],substr[3];
intn;
printf("输入的字符串:");
gets(str);
printf("子字符串:");
gets(substr);
puts(str);
puts(substr);
n=fun(str,substr);
printf("n=%d\n",n)
}
/*******************************************************************************************************/
按你的意思我改了下调用函数里的
intfun(char*str,char*substr)
{
inti,j,n=0,s=strlen(str),m=strlen(substr),pan=1;
printf("%d\n",m);
for(i=0;i
{pan=1;
for(j=0;j if((str[i+j]!=substr[j]))//这是进行比较,不是跳出 {pan=0; break;} if(pan) n++; } returnn; } Q:输入一串字符串,输出其中有多少个单词。 Eg:Good Wishes A: #include {char str[SIZE]={'\0'};int count=0; printf("plz input the string\n"); gets(str); puts(str);int length = strlen(str);for (int i=0;i { if(str[i]!=' ') {count++;while(str[i]!=' '&&str[i]!='\0') { i++; } } } printf("%d\n",count);return 0; } ‘\0’和‘0’的区别: 在c语言中,它们都是字符,都用对应的ASCII码来存储。例如第一个ASCII码,0,对应字符为(Null),就是 ‘\0’,即空字符。我们在c语言中判断一个字符串是否结束的标志就是看是否遇到‘\0’,如果遇到‘\0’,则表示字符串结束。字符‘0’和数字0的区别:前者是字符常量,后者是整形常量,但是字符常量可以像整数一样在程序中参与相关运算。 以上就是c语言统计单词个数的全部内容,//以下统计句子中的英文单词个数;for(i=0;(c=string)!='\0';i++)//for循环语句,遍历句子中的每个字符;初始化i=0;若字符c!='\0',即未到达结束符'\0'的话,执行i++;{//'\0'用作字符串的结束符。c语言统计字符串中单词个数