Leet Code 1816. 截断句子

句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前导或尾随空格。每个单词仅由大小写英文字母组成(不含标点符号)。
例如,“Hello World”、“HELLO” 和 “hello world hello world” 都是句子。
给你一个句子 s​​​​​​ 和一个整数 k​​​​​​ ,请你将 s​​ 截断 ​,​​​使截断后的句子仅含 前 k​​​​​​ 个单词。返回 截断 s​​​​​​ 后得到的句子。
在这里插入图片描述

  • 我的题解
char * truncateSentence(char * s, int k){
    int i;
    int count;

    count=0;
    i=0;

    while(*(s+i)!='\0'){
        if(*(s+i)==' '){
            count++;
            if(count==k){
                *(s+i)='\0';
            }
        }
        i++;
    }
    return s;
}
  • 我的小理解
    1、说实话,这道题我一眼就出答案,可是在编程的过程中出现了各种错误。直接用计数器count记下空格的数量,i是循环因子。
    2、要注意空格的数量并不对应短语的数量,因为空格数量和+1才是我们要的总数。不过由于计算机语言是按照从上到下的顺序编译,我们利用这个特性,就不需要考虑最后一次,因为越界之后自然就停下来了。
    3、继续说明为什么自动停下来,因为若遍历到实参字符串的"\0"字符,就表明到结尾了,这个时候我们已遍历完毕所有单词,返回只需要返回原字符串即可。也不用单独加结尾符号,因为我们就是利用传入的字符串做文章,可以减少内存消耗,不过平时不建议这么做,因为实参指针指向内容会发生改变。
    刚开始CLion没有报错,但是输出有毛病,我在答案前面输出一句话,又能出现正确的答案了,一旦使用了指针没有好好进行封装就要做好被内存背刺的准备。昨天我随便试了一下,Clion中不能跑出来的,力扣给AC了。我佛了。
  • 我的一些怨言

To be honest,就是这道题,让我下定了学C++的决心,因为实在是太难受了,一般情况下传参还好,要是涉及到递归传参和字符串变量传参就会出现各种奇怪的问题。其实不是C语言的错,是我自己的错,一些底层的逻辑我弄不清楚,递归过程又不是完全透明的,因此影响了我的判断。指针还有可能造成内存的访问错误,我今天,把这几个博客收尾,就进入学习C++的节奏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值