C语言不同单词个数统计

写在前面:这里是小王成长日志,一名在校大学生,想在学习之余将自己的学习笔记分享出来,记录自己的成长轨迹,帮助可能需要的人。欢迎关注与留言。

题目:

题目链接:https://www.dotcpp.com/oj/problem1487.html

题目 1487: [蓝桥杯][算法提高VIP]不同单词个数统计

时间限制: 1Sec 内存限制: 128MB 提交: 1988 解决: 841

题目描述
编写一个程序,输入一个句子,然后统计出这个句子当中不同的单词个数。例如:对于句子“one little two little three little boys”,总共有5个不同的单词:one, little, two, three, boys。
说明:(1)由于句子当中包含有空格,所以应该用gets函数来输入这个句子;(2)输入的句子当中只包含英文字符和空格,单词之间用一个空格隔开;(3)不用考虑单词的大小写,假设输入的都是小写字符;(4)句子长度不超过100个字符。
输入
输入只有一行,即一个英文句子。
输出
输出只有一行,是一个整数,表示句子中不同单词的个数。
样例输入
one little two little three little boys
样例输出
5

C语言解法

注意:题目没说单词之间是一个空格,事实上,他给的就是两个空格

题目明显分为输入和处理两部分,我们分开来看

接收输入方法1,最简单也最取巧:

	char a[50][20];
	while (~scanf("%s", a[j++]))
        ;
    //注:单词个数即为j

接收输入方法2,需要注意k=-1和多个空格两个注意点:

	char a[50][20], buffer[101] = "\0";
    gets(buffer);
    // 遍历buffer字符串 取出单词存入数组a中
    for (i = 0; i < len; i++, k++)
        if (buffer[i] != ' ') //
            a[j][k] = buffer[i];
        else if (a[j][k + 1] != ' ')//注意可能不止一个空格
        {
            a[j][k] = '\0';
            j++, k = -1; //行数加1 列数归为-1 因为k++会从-1置为0}
        }

//注:最后单词个数为j+1

接收输入方法3,方法2的另一种写法

	char a[50][20], buffer[101] = "\0";
    gets(buffer);
    for (i = 0; i < len; i++)
    {
        if (buffer[i] != ' ')
            a[j][k++] = buffer[i];
        if (buffer[i] != ' ' && (buffer[i + 1] == ' ' || buffer[i + 1] == '\0'))
        {
            a[j][k] = '\0';
            j++, k = 0; //行数加1 列数归0
        }
    }

处理部分,寻找句子中不同单词并计数

    int new_len = 0, flag;
    char arr[j][20];
    for (i = 0; i < j; i++)//j是输入的单词个数,可能需要根据前面的写法微调
    {
        flag = 1; //默认是独特不重复的一个单词
        for (k = 0; k < new_len; k++)
            if (strcmp(a[i], arr[k]) == 0)
            {
                flag = 0;//找到一样的单词则置为0
                break;
            }
        if (flag == 1)
            strcpy(arr[new_len++], a[i]);
    }

    printf("%d", new_len);

都看到这里了,各位哥哥姐姐叔叔阿姨给小王点个赞 关个注 留个言吧,和小王一起成长吧,你们的关注是对我最大的支持。
有事没事进来看看吧 : 小王的博客目录索引
C语言专栏看这 : C语言学习专栏


如果以上内容有任何不准确或遗漏之处,或者你有更好的意见,就在下面留个言让我知道吧-我会尽我所能来回答。

猜你喜欢

转载自blog.csdn.net/weixin_45761327/article/details/106913887