C语言——字符串里删除字符函数

前言:对于一个刚接触C语言的人来说,写个简单的字符串操作函数简直是要了我的命,刚开始看网上的大神写的代码的时候觉得很简单,自己想了一会之后觉得自己动手写肯定是没问题,可是当我自己写的时候(在不看他们代码的前提下,完全用自己的逻辑)真的是觉得自己只会理论上的可以,真的是纸老虎,所以想当个的程序员,必须要自己动手了!


这是我在做一道笔试题的时候遇到的一道编程的题:

题目:写一个函数,实现删除一个字符串str中,给定的一个字符'del';

void strdel(char* str, char del)
{


}


下面是我写的代码:

#include 

void strdel(char* str, char del)
{
        char* p=str;
        while(*p != '\0')
        {
                if(*p == del)
                {
                        *p++;
                }
                else
                {
                *str = *p;
                *str++;
                *p++;
                }

        }
        *str = '\0';
}


void main()
{
        char str[]="adffss";
        strdel(str, 'f');
        printf("new str = %s\n",str);

}


下面是运行的结果:

./a.out 
new str = adss

说下我遇到的问题:

第一个:我在遍历到整个字符串的最后时,我没有加*str = '\0';因为我觉得是他本身就是个字符串,肯定有'\0';所以我就没加,运行了这个程序,结果是new str = adssss;但是我还是没有明白,然后我调试了下,想到了,因为指针p是指向字符串str的,当p指向第二个s之后,p把指向的字符s覆盖了字符串str的ff,使得字符串str变成了"adssss",但是指针p已经遍历了整个字符串了,所以必须使得字符串str在字符s的后面加上'\0'这样才是正确的。

第二个:我之前觉得我对while和for循环真的是烂熟于心了,但是在写这个代码的时候,我是真的菜,写完这个代码之后我有点明白了。

    yopeace



你可能感兴趣的:(c语言)