1. 首页 » 生活常识

C语言实现字符串长度计算的几种方法详解

今天这道题目呢,很直白,就是计算单词长度。

在程序中读入一行文本,其中以空格分隔为若个单词,以“.”为结束符号,要打印输出每个单词的长度,注意,这里的单词与语言无关,比方说It's算作为4个单词,也可能出现连续的空格,在最后出现“.”的时候,输入才算结束。

这道题目呢,也给了提示,在C语言中,用scanf函数来输入字符,scanf("%c",...)。

用C语言实现计算“单词长度”,基础编程由此开始(第二十三节)

梳理逻辑

1、读入一行文本,使用scanf函数,然后字符的话,代表数据类型为char。

2、直到读到“.”为止,这里就需要用到一个while循环语句了,当读入的文本不等于“.”时,它才会输入,否则就会停止。

    char text;//给出的一行文本
    while(text!='.'){
        scanf("%c",&text);
    }

3、接下来就是计数,以空格为一个单位,从第一个单词的第一个元素开始数,直到空格为止就停止,那么我们需要用到计数法。

假设我们只是输入“It's.”,那么在计数的时候会把“.”也给计数进去,所以需要在计数的基础上减去1才行,这是针对最后一个单词的计数方法,所以要写在循环外面。

那如果有空格的情况呢,我们就需要进行一个单独讨论了,

遇到空格之前,先进行正常计数,遇到空格后,就要重新计数,而空格之前的,是没有“.”的,所以只需要正常计数即可,之后呢,如果count!=0的话,那就可以打印一个空格,然后再把count复位成0,再进行之前的步骤即可。

        else if(text==' '){
            if(count!=0){
                printf("%d", count);
                printf(" ");
            }
            count = 0;
        }
    }
        printf("%d",count-1);

可是到这一步呢,我进行了测试,却发现无法满足PAT平台要求的所有测试点,其中的“空句子”、“连续多个空格”、“开头结尾空格”都出现了问题。

那么我们先来思考一下空句子的情况,空句子的时候,就是只有一个“.”的时候,那么最后的count应该是要满足>1的情况下的,然后没有结果打印。

以及我上面写的仍存在一些问题,这个printf语句应该是写在if(count!=0)这个条件判断中的。

当我修改完这两个问题后,发现只剩下开头结尾空格仍存在问题了。

经过测试,我发现最终问题就在于,如果在“.”前有空格的话,在打印输出的结果中,数字末尾会出现空格符号。

用C语言实现计算“单词长度”,基础编程由此开始(第二十三节)

那么这种情况是需要单独进行讨论的,也就是在我们的if(count!=0)这个条件语句中要进行分情况讨论。

这里呢,我在做题的时候没有想明白,于是我去网上查阅了相关资料,发现我们在这边需要单独进行一个标记,也就是每进行一次循环需要增加一个标记,如果标记不为零,那么就打印输出“ ”(空格),如果标记为零,那就没有打印输出“ ”空格。

代码实现

//单词长度
#include
int main(){
    char text;//给出的一行文本
    int count = 0;//计数法
    int sign = 0;
    while(text!='.'){//循环遇到“.”停止
        scanf("%c",&text);//按照题目要求输入字符
        if(text!=' '){
            count++;
        }
        else if(text==' '){
            if(count!=0){
                if(sign!=0){//进行一个标记
                    printf(" ");
                }          
                printf("%d", count);
                sign++;//每进行一次循环增加一个标记   
            }
            count = 0;
        }
    }
    if(count>1){
        if(sign!=0){//标记不为0的时候,才会打印空格,而平常状态标记为0,不会打印空格
            printf(" ");
        }
        printf("%d",count-1);
    }
}

结果测试

用C语言实现计算“单词长度”,基础编程由此开始(第二十三节)

用C语言实现计算“单词长度”,基础编程由此开始(第二十三节)

用C语言实现计算“单词长度”,基础编程由此开始(第二十三节)

总结

别看这道题目简单,但其实要梳理清楚这道题目的逻辑可没有想象中的那么简单,我在这道题目上也卡了不少时间。

声明:本文由"麦兜"发布,不代表"破站"立场,转载联系作者并注明出处:https://www.848586.cn/135580.html