zoukankan      html  css  js  c++  java
  • C语言实现计算字符串中最后一个单词长度,单词以空格隔开

    计算字符串中最后一个单词长度,单词以空格隔开

    //计算字符串最后一个单词的长度,单词以空格隔开。
    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        char str[5000];
        gets(str);
        int count=0;
        int len=strlen(str);
        for(int i=(len-1);i>=0;i--)
        {
            if(str[i]!=' ')
            {
                count++;
            }
            else
            {
                break;
            }    
        }
        printf("%d
    ",count); return 0;
    }

    此代码虽然能运行,但是此函数有一个bug,gets函数:没有指定输入字符的大小,限制输入缓冲区的大小,如果输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出。后果非常怕怕

    修改代码如下:

    //计算字符串最后一个单词的长度,单词以空格隔开。
    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        char str[5000];
        fgets(str,5000,stdin);
        int count=0;
        int len=strlen(str);
        for(int i=(len-2);i>=0;i--)
        {
            if(str[i]!=' ')
            {
                count++;
            }
            else
            {
                break;
            }    
        }
        printf("%d
    ",count);     
        
        return 0;
    }

    fgets函数会指定大小,如果超出数组大小,会自动根据定义数组的长度截断。

    还有一点,上面代码中标红部分

     for(int i=(len-2);i>=0;i--) 

    为什么i = (len -2)

    因为fgets函数本身会把回车换行符存入了字符串里。所以实际读入的字符串会多一个回车换行符,故

    i=(len-2)
  • 相关阅读:
    推荐一款稳定快速免费的前端开源项目 CDN 加速服务
    MySQL限时解答
    OneProxy的功能与限制
    MySQL浮点计算存在的问题与解决方案
    DAS、SAN、NAS的区别
    气质
    受制于人
    mysqlbinlog flashback 5.6完全使用手册与原理
    Innodb引擎 compact模式下元组的磁盘存储结构
    数据迁移程序
  • 原文地址:https://www.cnblogs.com/Liu-Jing/p/9614989.html
Copyright © 2011-2022 走看看