c语言学习笔记三

第三章,函数
字符串函数
//strcmp
  int my_strcmp(char *str1,char *str2)
  {
     while(*str1 = = *str2)
     /*不可用while(*str1++= =*str2++)来比较,当不相等时仍会执行一次++,
      return返回的比较值实际上是下一个字符。应将++放到循环体中进行。*/
     {
        if(*str1 = = '')
        {
            return 0;
        }
        str1++;
        str2++;
      }
        if(*str1>*str2)
     {return 1;}
    else
     {return -1;}
  }
 
int my_strcmp(char *sour,char *des)
{
     int ret=0;
     while(!(ret=*sour-*des)&&*des) //这里的*dest判断很重要,否则二者完全相等的时候就会越界出现难以判断的情况  
    {    des++;
         sour++; }
     if(ret<0)
    {   ret=-1; }
     else if (ret>0)
    {   ret=1; }
     return ret;
}
其他的字符串函数类似,都可以写出来。
 
 
分析下列程序
  void swap(char *p1,char *p2)
  {
          char tmp=0;
         tmp=*p1;
         *p1=*p2;
         *p2=tmp;
  }
   char *func(char *str,int n)
  {
     char *s1=str;
     char *p1=str;
     char *p2=str;
     int len=strlen(str);
     while(*p1!=*(p2+len-1-n))
    {
         p1++;
    }
     for(;p1-s1>0;s1++,p1--)
    {
         swap(s1,p1);
    }
     char *s2=p2+len-n;
     char *p3=p2+len-1;
     for(;p3-s2>0;p3--,s2++)
    {
         swap(p3,s2);
    }
    
     char *ss=str;
     char *ss1=str;
     char *sw=ss+len-1;
     for(;sw-ss1>0;sw--,ss1++)
    {
         swap(sw,ss1);
    }
 
     return str;
}
int main()
{
     char str[]="helloworld" ;
     int n=3;
    printf( "%s",func(str,n));
     return 0;
}
 
 
 
itoa;
将整型数据转化为字符
如,将12345转化为“12345”
 
分析如下,利用求余运算符将个位往上一个一个求出来,然后用字符数组把它保存起来。
遇到的问题
首先得新开一个数组,数组的大小用len来控制,len的大小为整数的位数,
如果整数中有零的话,直接把字符‘0’赋值给对应的位置。
    
void itoa()
{
     int a=10;
     int b=0;
     int len=0;
    b=a;
     while(a!=0)
    { if(a%10==0)
         { len++;   }
      else
         { len++;    }
         a=a/10;
    }
     char *str=(char *)malloc(sizeof( char)*(len));
     for(int i=len-1;i>=0;i--)
    { if(b%10==0)
         {   str[i]= '0';   }
         str[i]=b%10+ '0';
         b=b/10;
    }
         printf( "%s ",str);
         free (str);
}
深入
如果开头有-号
则在开辟空间的时候,得多开辟一个存放符号的位置,即len+1
如果没有-号,就不开辟。
原文地址:https://www.cnblogs.com/junlinfeizixiao/p/5611444.html