zoukankan      html  css  js  c++  java
  • 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
    如果没有-号,就不开辟。
  • 相关阅读:
    Enable Zombie
    python中调用c文件中的函数(ubuntu)
    NSNotificationCenter使用心得(原)
    TCP/UDP
    xcconfig 文件使用( 转 )
    TS流解析 (转)
    c 数字和char类型转换
    结构体如何使用NSData包装
    NSValue 保存定长的结构体
    遍历DOM的所有节点,输出宽度高度都大于50的元素节点名称
  • 原文地址:https://www.cnblogs.com/junlinfeizixiao/p/5611444.html
Copyright © 2011-2022 走看看