基础不扎实的计算机小白 2021-11-08 01:39 采纳率: 100%
浏览 238
已结题

关于使用strcpy函数删除字符串元素的问题

上图:

img

代码:


#include <stdio.h>
#include<string.h>//加了这个才能用 strlen 和 strcpy

int main() {
    char s[] = "qsds144.6,EXO";//题目字符串s
    int i, L;//i用来遍历确定元素的位置
             //L用来记录字符串的长度

    printf("处理前的字符串: %s\n", s);

    L = strlen(s);//添加头文件string.h 用strlen函数判断字符串s的长度并赋值给L

    for (i = L - 1; i >= 0; i--) {//L-1的意思:因为字符串是从0开始读起,所以L是长度,长度-1那么就是s的最后一个元素
        if ((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z'))//所以这个语句就是判断位置i,及最后一个元素的位置是否是字母
            strcpy(s + i, s + i + 1);//strcpy语句的用法strcpy(1,2)把 字符串元素2 复制给 字符串元素1
                                     //当i是最后一个元素的位置是i+1就是'\0',那么s+i就是元素O,那么s+i+1就是'\0'
                                     //所以当if判断到s+i是字母的话,就将s+i+1复制给s+i,这样以来原本的元素O就会被'\0'顶替掉,相当于删除掉
                                     //然后继续循环 i--就来到了倒数第二个元素继续上面的判断操作,如果不是字母的话就不顶替掉,继续判断倒数第三个位置
    }

    printf("处理后的字符串: %s\n", s);//输出整个字符串用%s格式
    return 0;
}

问题描述:
strcpy(1,2)就是把2赋值给1
那么最后得出的结果为什么不是:1111144.6,而是144.6,呢?他不是复制覆盖吗?

  • 写回答

2条回答 默认 最新

  • 我叫RT 2021-11-08 03:23
    关注

    你代码逻辑有问题。判断语句写的是,如果 s[i] 字母,则把该位置的下一个字符覆盖到当前位置。


    abcd111EFH

    这个字符串在处理最后一个字符 ‘H’时,判断当前符合要求,则把 H 之后的'\0'结尾字符串覆盖到该位置。原串变为 abcd111EF


    同理,在 abcd111 字符串处理时,由于数字 1 不是英文字母,则跳过。那么第一个命中 if 的是字母 d 。此时将 d 后面的覆盖到当前位置,那么原串变为 abc111

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月16日
  • 已采纳回答 11月8日
  • 创建了问题 11月8日

悬赏问题

  • ¥15 ansys electronics 2021 R1安装报错,错误代码2,如图
  • ¥30 搭建面包板由NE555N和SN74LS90N组成的计时电路时出了问题
  • ¥15 无源定位系统的时差估计误差标准差
  • ¥15 请问这个代码哪里有问题啊
  • ¥20 python--version在命令端输入结果Python is not defined怎么办?还有pip不是exe格式是不是没安装成功?
  • ¥15 通过GaussianView进行结构微调消除虚频
  • ¥15 调用transformers库
  • ¥15 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
  • ¥15 新硬盘安装的程序总是崩溃,提示遇到错误
  • ¥15 openpcdet自制数据集评估bev精度和3d精度相同