栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

xdoj 204 单词统计(四种方法) 自己的思考和各位的转载

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

xdoj 204 单词统计(四种方法) 自己的思考和各位的转载

标题
单词统计

描述
输入字符串string[N](N≤100),各个单词以空格隔开,单词长度小于等于8,输入单词word[M](M≤8),在string中查找出相同的单词并统计该单词出现的次数信息,输出单词和出现次数的信息, 数据之间空一格空格。主函数输入字符串和待统计单词,编写函数count()实现统计和信息输出。

时间限制
1    
内存限制
10000    
类别
1

输入说明
输入一行字符以空格隔开各个单词,输入要统计的单词。

输出说明
格式输出:输出单词及其出现的次数信息,数据之间空一格。

输入样例
dog cat dog dog the abc dog hahe
dog

输出样例
dog 4


①自己的想法(比较规矩)

比较容易忽略的就是必须一模一样(单词大小写不要求转换),

所以要考虑多种可能性

比如:abcde   bdce    bde     bcdef      bcde

bcde

那么这之中符合条件的只有1个

所以写代码时要注意加条件筛选 

#include 
#include
int main()
{
	int m,n;
	int i,j,k,cout=0,num=0;
	char a[100],w[8];
    gets(a);
    gets(w);
	n=strlen(w);
	m=strlen(a);
	for(i=0;i 

 

②使用二维数组a[i][j],其中i为单词的个数,a[i]代表第i个单词

转自 https://blog.csdn.net/yingmu__/article/details/108040190

#include
#include
#include
int main(void) {
	char array[100][9];//
	char str[1000];
	char flag[9];
	int i,num,index,count;
	gets(str);
	gets(flag);
	//提取单词
	num=index=0;
	for(i=0; i 

③在②的基础上使用字符串比较函数 strcmp(a[i],w)

strcmp(s1,s2)

  • 自左向右逐个按照ASCII码值进行比较,直到出现不同的字符或遇’’为止。
  • 如果返回值 < 0,则表示 s1 小于 s2。
  • 如果返回值 > 0,则表示 s1 大于 s2。
  • 如果返回值 = 0,则表示 s1 等于 s2。

转自  https://blog.csdn.net/weixin_51488007/article/details/121600384 

 #include
#include
int main()
{
	char pi[20][20], exam[20];
	int i =0, j = 0;
	do
	{
		scanf_s("%s", pi[i], 20);
		i++;
	}while (getchar()!='n');
	//for (int k = 0; k < i; k++)
		//puts(pi[k]);测试输出
	gets_s(exam,20);
	int count = 0,nu=strlen(exam);
	for (int j = 0; j <= i; j++) {
		if (strcmp(pi[j], exam) == 0)
			count++;
	}
	printf("%s %d", exam, count);
	return 0;
}
————————————————
版权声明:本文为CSDN博主「如库~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_51488007/article/details/121600384

④在②的基础上使用自动机

通过switch函数一步步筛选,由于该题下对于字符而言有三种情况:

1)字符为空格;2)字符不是单词中的字符;3)字符符合单词中字符;

@

我不是好人(ノ=Д=)ノ┻━┻

这位大大写的非常详细,很幽默哈哈

其实自动机看似复杂,但理解运行原理后还是比较容易理解的(●'◡'●)

转自 https://blog.csdn.net/qq_45836372/article/details/103561950

//转自 https://blog.csdn.net/qq_45836372/article/details/103561950
#include 
#include 

#define SPACE 0 //空格状态
#define LETTER -1   //字母状态,但是这表示不是要查找的单词的字母的状态
#define WORD 1  //而这种状态是要查找的单词的状态
//当然了,如果状态时大于1的数,说明是要查找的单词的中间部分的状态,上文讲过了

void count(char *str,char *word)	//题目要求额外编写函数,其实都一样,OJ只看结果是否正确
{
    int state=0,ans=0,i;    //state表状态,先假设是空格,因为空格上来就判断是不是三种状态(中的某种状态)
    int len=strlen(word);
    for(i=0;str[i];++i) //遍历数组,让一个又一个参赛者(单词)接受洗礼
    {
        switch(state)
        {
        case(SPACE):    //(如果上一个字母是空格)欢迎下一位参赛者入场
            if(str[i]==word[0])state=WORD;  //(如果这一个字母是所查的单词的第一个字母)恭喜这位参赛者踏过门槛
            else if(str[i]==' ')state=SPACE;    //(其实这句话可以省略,因为反正都是空格状态,改它是一样的)坐等下一位参赛者入场
            else state=LETTER;  //(剩下的肯定是其他字母状态了)连门槛都过不了,out
            break;
        case(LETTER):   //(是其他字母状态)这位参赛者已经out了,现在正在求情
            if(str[i]==' ')state=SPACE; //求情无效,坐等这位参赛者自行退场
            break;
        default:    //(是要查找的单词状态)已经踏过门槛的参赛者开始接受洗礼或正在接受洗礼
            if(state 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/698258.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号