字符串操作

     这两天练习中,做好多个字符串相关的练习,字符串在C程序中应用也是非常多,自己针对这两天不断地与她打交道,对于字符串的操作做一些总结。

 

1、 字符串、字符数组:

      char str1[5] = {'H', 'e', 'l', 'l', 'o'};

      char str2[] = "Hello";

 

      上面的第一个 str1 只能是字符数组,如果在程序中把它当做字符串处理的话就会出错。

               第二个 str2 就是一个字符串。

  

      上面的字符数组的大小 sizeof(str1)  = 5, 而字符串的大小 sizof(str2) = 6, 因为字符串的最后有一个结束字符 '/0', 也就是说 str2 中的字符 有 'H', 'e', 'l', 'l', 'o' ,'/0' 六个字符。

       如果在字符数组的初始化或赋值中 让最后一个字符等于 '/0', 这样字符数组也就可以把它当做字符串来处理。

       char str1[6] = {'H', 'e', 'l', 'l', 'o', '/0'};    这样 str1 就可以做一个字符串了。

 

 

2、 字符串做参数传递给函数:

 

       字符串做参数传递给函数时,大多都是指针传递,是把字符串的首地址传递给函数(如果只想函数使用字符串,而不需要函数修改字符串传地址进来的时候用 关键字const修饰地址,例:const char *;其他传递地址的参数也一样)。

 

       在函数中对于传递进来的字符串处理,应该注意以下几个方面:

   

       1)、判断传入进来的地址是否为空。。。。。。这是一个习惯,函数应该对传入进来的所有指针都做一下是否为空的判断,再进行针对性的操作,这样可以增加程序的健壮性。

 

       2)、注意对传入进来的字符串指针进行保护,这个指针式指向字符串的第一个字符的地址,在函数里不断地对字符串里的字符进行操作,就要不断地变换地址,如果只有一份地址拷贝的话,而又由于刚才的操作已经改变了指针变量的值,要想再对这个字符串进行完整的操作就不可能了。如果你只操作一次,可以不用拷贝。

 

       3)、对字符串添加或删除了字符,一定注意要给字符串加上结束字符 '/0' 。

 

       4)、注意当前指针指向了字符串里的位置,哪个字符!

 

        while(*str != '/0')

        {

                 str++;

        }

 

        执行完while之后,指针str 指向的是结束字符 '/0' 。

 

        while(*(str++) != '/0')

                 ;

 

        执行完while之后,指针str 指向的是结束字符 '/0' 的下一个地址。

 

 

3、   对于字符串的一些常见操作:

 

        1)将整个字符串逆置:

 

           int inverse(char *str)

           {

                   char *str_temp;

 

                   if(str == NULL)  return -1;  //

 

                   str_temp = str;                  //

 

                   while(*str_temp != '/0')

                   {

                            str_temp++;

                   }

 

                    str_temp--;                        //str_temp 指向的是最后一个字符

 

                    /*===逆置===*/

                    while(str < str_temp)

                    {

                                 /*====交换====*/

                                 *str = (*str) + (*str_temp);

                                 *str_temp = (*str) - (*str_temp);

                                 *str = (*str) - (*str_temp);

                                /*===========*/                                  

 

                                  str++;

                                  str_temp++;   

                    }

                    /*=========*/

 

           }

 

 

           2)、删除字符串中指定的字符

 

           int delete_char(char *str, char letter)

           {

                  char *p;

 

                  if(str == NULL)  return -1;

 

                  while(*str != '/0')

                  {

                          if(*str == letter)

                          {

                                   p = str;

 

                                   while(*p != '/0')

                                   {

                                           *p = *(p + 1);

                                            p++;

                                   }

 

                                   str--;                     //这里一定要注意,你想想就会明白的

                          }

 

                          str++;

                  }

 

           }

 

           。。。。。。。。。。。

 

           以上只是我在练习中的一些小总结,若有什么地方总结的不对或不足的话,欢迎指出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值