当前位置:首页 » 编程语言 » c语言统计不同单词
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言统计不同单词

发布时间: 2022-01-30 18:02:21

1. c语言问题:一行语句中不同单词个数统计

如果只要思路的话,可以:
用切割函数strtok 对这一段话进行切割,得到的单词保存在一个二维char数组里面,并计算出所有单词的个数num,然后将第一个单词和后面num-1个单词比较,有重复的,将num-1,最后可以得到单词个数。
代码太复杂了,没心情写!!

2. 帮忙修改一下代码--C语言实现统计一句话中不同单词的个数~我只写出了单词个数,不知道下一步怎么做了~~

#include<stdio.h>
#include<string.h>
int main()
{
char str[100],word[100][20];
char temp[20];
int num = 1;
int length;
int i,j=0;
gets(str);
length = strlen(str);
for(i = 0; i < length; i++)
{
if(str[i] == ' ')
{
word[num-1][j]=0;
num++;
j=0;
}
else word[num-1][j]=str[i];
j++;
}
printf("单词总数:%d\n", num);

if(j>0) word[num-1][j]=0;
for(j=0;j<num;j++)
for(i=0;i<num-j-1;i++)
{
if(strcmp(word[i],word[i+1])>0)
{
strcpy(temp,word[i]);
strcpy(word[i],word[i+1]);
strcpy(word[i+1],temp);
}
}
j=1;
for(i=0;i<num-1;i++)
if(strcmp(word[i+1],word[i])!=0)j++;
printf("不同单词个数:%d\n", j);
return 0;
}

3. C语言统计单词个数问题!

根据英语的书写习惯,在每个单词前后都会有空格分隔。 所以可以依据空格来划分单词。

不过,由于空格可能存在连续多个,所以仅统计空格数是不可以的,需要更复杂一些的算法。

一、算法设计:

核心思想是通过一个flag,来确定单词的起始, 每出现一个单词的起始,则表示存在一个单词。 这样统计出现的单词起始个数,即可获得单词总数。

1、flag初始为1;

2、遍历字符串。

3、对于每个字符,如果出现非空格字符,且flag为1,则为单词起始,累加计数器。同时赋值flag为0。

4、在flag为0情况下,如果出现空格,表示上一个单词已经结束,设置flag为1。

5、 遍历结束后输出结果。


二、参考代码:

#include<stdio.h>
intfunc(char*s)//计算单词数函数
{
inti,n=0,flag=1;
for(i=0;s[i];i++)//遍历
{
if(flag==1)
{
if(s[i]!='')//单词起始
{
n++;
flag=0;
}
}
elseif(s[i]=='')//上一个单词结束。
flag=1;
}
returnn;//返回结果。
}
intmain()
{
chars[200];

gets(s);//输入字符串。

printf("%d ",func(s));//调用函数,计算并输出结果。
return0;
}

4. C语言 统计相同单词出现次数

帮你写了一个,看看吧。根据自己的实际情况再改改,如果有必要的话:
/*
输入要求:若干个以空格分割的单词序列,单词的总数不超过1000个,每个单词的长度不超过20个英文字符。
这里单词不区分大小写,例如 Hello与hELLo被认为是相同的单词。
*/
#include <stdio.h>
#include <string.h>

#define M 1000
#define N 20

void main()
{
char str1[M][N];//单词字串结果存放数组
char str2[M];//输入串或者用char *str2也可,这样可以
int strC[M];//单词字串计数数组.对应每个单词串,拥有一个计算器
int i=0,j=0,k=0,t=0,x=0;

gets(str2);//接受行输入
t=strlen(str2)+1;//计算该行中总字符数
printf("输入字串为:%s\n",str2);

while(j<t)
{
for(;str2[j]==32;j++);//如果串中是空格,则拼命跳过,不计

while(k<N&&str2[j]!=32) //不是空格,且没有超出题目中的要求: 每个字串长度小于N.如果大于N,自动截除.
str1[i][k++]=str2[j++]; //将输入行字串分割存放到结果数组中
str1[i][k]='\0'; //如果该串原来大于20,会被自动截除
strC[i]=1; //计数
for(x=0;x<i;x++) //与前面的串比较
if(strncmp(str1[i],str1[x],N)==0)//调用库函数,不分大小写与前面的串相比,相同则返回0.
{
strC[x]++; //相同,计数器数组增加
i--; //该串为重复串,总串数不增加
break; //跳出for循环
}
i++; //无重复串,则总字串数增加
k=0;
}

printf("结果:\n");
t=0;
for(;t<i;t++)//不超出总串数
printf("%s,%d\n",str1[t],strC[t]);
}

5. C语言 统计文件中各个单词的个数

我只是把int main改为void main了,调试是可以运行的 啊

6. C语言 统计单词个数

#include "stdio.h" main() { char s[81],c; int i,num=0,word=0; printf("请输入一行英文:\n"); gets(s); for(i=0;(c=s[i])!='\0';i++)//判断句子是否到未 if(c==' ') word=0;//是空格就为0 else if(word==0)//不是空格就判断之前有没有空格 { word=1;//复位用来判断空格是否存在的开关 num++;//如果之前有空格,单词数加1 } printf("本行中共有%d个单词.\n",num); } 其原理很简单: 对每个字符进行判断,如果是空格就把变量word标记为0,如果不是空格就判断word是不是0(即判断之前有没有空格),如果存在空格单词量加1,然后复位word变量为0。就这样重复,知道句子结束

7. C语言统计单词个数

Q:输入一串字符串,输出其中有多少个单词。
Eg:Good Wishes
A:

#include <stdio.h>#include <string.h>#define SIZE 20int main()
{ char str[SIZE]={''}; int count=0;
printf("plz input the string ");
gets(str);
puts(str); int length = strlen(str); for (int i=0;i<length;i++)
{
if(str[i]!=' ')
{ count++; while(str[i]!=' '&&str[i]!='')
{
i++;
}
}
}
printf("%d ",count); return 0;
}

‘’和‘0’的区别:
在c语言中,它们都是字符,都用对应的ASCII码来存储。例如第一个ASCII码,0,对应字符为(Null),就是 ‘’,即空字符。我们在c语言中判断一个字符串是否结束的标志就是看是否遇到‘’,如果遇到‘’,则表示字符串结束。字符‘0’和数字0的区别:前者是字符常量,后者是整形常量,但是字符常量可以像整数一样在程序中参与相关运算。

(7)c语言统计不同单词扩展阅读

字符串所有字符,如果当前字符不为空,单词数+1,再嵌套一个while循环,判断当前单词是否结束。

#include <stdio.h>

#include <string.h>

int count_words(char* s)

{
int len=strlen(s);

int count,i;

for(i=0;i<len;i++)

{

if(*(s+i)!=' '){ // 如果当前代码不为空

count++; //单词数+1

while(*(s+i)!=' '&& i<len) //判断当前单词是否结束

i++;

}

}

return count;

}

int main()

{

char* a="i love you";

printf("%d",count_words(a));

}

8. C语言,不同单词个数统计。基础语句

这个用C++中 map关联容器很容易,每读入一个单词是,就执行一个map过程,最后ap中键值的个数就是你要输入的数字即单词的个数。
用c语言写的话,就是把这些单词存储在字符串数组中,对字符数组遍历一遍。就可以了~

9. C语言,不同单词个数统计。 注意!是 不同的 单词的个数!

ACM还是作业? ACM,我就采用高效技巧性的算法,否则简单为美.请采用评论告诉

10. C语言怎么统计相同单词出现次数

输入要求:若干个以空格分割的单词序列,单词的总数不超过1000个,每个单词的长度不超过20个英文字符。这里单词不区分大小写,例如 Hello与hELLo被认为是相同的单词。

#include<stdio.h>
#include<string.h>
#defineM1000
#defineN20
voidmain()
{
charstr1[M][N];//单词字串结果存放数组
charstr2[M];//输入串或者用char*str2也可,这样可以
intstrC[M];//单词字串计数数组.对应每个单词串,拥有一个计算器
inti=0,j=0,k=0,t=0,x=0;
gets(str2);//接受行输入
t=strlen(str2)+1;//计算该行中总字符数
printf("输入字串为:%s ",str2);

while(j<t)
{
for(;str2[j]==32;j++);//如果串中是空格,则拼命跳过,不计
while(k<N&&str2[j]!=32)//不是空格,且没有超出题目中的要求:每个字串长度小于N.如果大于N,自动截除.
str1[i][k++]=str2[j++];//将输入行字串分割存放到结果数组中
str1[i][k]='';//如果该串原来大于20,会被自动截除
strC[i]=1;//计数
for(x=0;x<i;x++)//与前面的串比较
if(strncmp(str1[i],str1[x],N)==0)//调用库函数,不分大小写与前面的串相比,相同则返回0.
{
strC[x]++;//相同,计数器数组增加
i--;//该串为重复串,总串数不增加
break;//跳出for循环
}
i++;//无重复串,则总字串数增加
k=0;
}

printf("结果: ");
t=0;
for(;t<i;t++)//不超出总串数
printf("%s,%d ",str1[t],strC[t]);
}