c语言学习笔记三

第三章,函数

字符串函数

//strcmp

  int my_strcmp(char *str1,char *str2)

  {

     while(*str1 = = *str2)

     /*不可用while(*str1++= =*str2++)来比较,当不相等时仍会执行一次++,

      return返回的比较值实际上是下一个字符。应将++放到循环体中进行。*/

     {

        if(*str1 = = ‘\0‘)

        {

            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\n",str);

free (str);

}

深入

如果开头有-号

则在开辟空间的时候,得多开辟一个存放符号的位置,即len+1

如果没有-号,就不开辟。

时间: 2024-07-28 23:40:30

c语言学习笔记三的相关文章

JavaScript--基于对象的脚本语言学习笔记(三)

事件处理器 1.一个数据校验表单的例程 <html> <head> <title>js练习</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript"> String.prototype.trim=function(){ r

Go语言学习笔记(三) [控制结构、内建函数]

日期:2014年7月21日 一.控制结构 1.Go中,只有几个控制结构,它没有do或者while循环,有for,灵活的switch语句和if,在switch中可以接受像for那样可选的初始化语句,另外Go中还提供了类型选择和多路通信转接器的select.Go的控制结构的语法和C相比有所不同,它不需要圆括号,但语句体必须总是包含在大括号内. 2.控制结构语法 1)if-else (1)if后紧跟单个条件 例如:if x > 0 {   //{必须和if在同一行,这是Go语法规定的,如果换行写,编译

【GO】GO语言学习笔记三

7.数组: 几乎是最常用的数据类型了... 数组就是指一系列同一类型数据 的集合.数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数 组的长度. 常规的数组声明方法: [32]byte // 长度为32的数组,每个元素为一个字节 [2*N] struct {x , y int32} //复杂类型数组 [1000]*float32 //指针数组 [3][5]int //二维数组 [2][2][2]float64 // 等同于[2]([2]([2]float64))

C语言学习笔记(三) 使用union检查系统大小端模式

问题:请写一个C函数,若处理器Big_endian的,则返回0:若是Little_endian的,则返回1. 简单复习下大小端的概念: 大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中. 小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中. 提示:C语言中的char占1个字节,而int占4字节,因此如果某个int变量被赋值为1,则大端模式内存布局(由低到高,下同)应该为0x00,0x00,0x00

C语言学习笔记(三) 输入输出函数的基本用法以及运算符

printf() ——将内容输出到显示器上 四种用法 1.printf("字符串");   直接输出字符串 2.printf("输出控制符",输出参数); 3.printf("输出控制符1 输出控制符2",输出参数1,输出参数2); 输出控制符和输出参数的个数必须一致: 4.printf("输出控制符 非输出控制符",输出参数); 输出控制符包含如下: 1.%d —— int 2.%ld ——  long int 3.%c —

Perl语言学习笔记 9 正则表达式处理文本

1.替换 s/PATTERN/REPLACE/; #返回是否替换成功的布尔值 可以使用捕获变量,如:s/(\w)/$1/ 匹配失败则不做任何处理 2.定界符 对于没有左右之分的定界符,重复三次即可,如:s///.s### 对于有左右之分的定界符,需使用两对,一对包含模式,一对包含替换字符串,这两对可以不一样,如:s{}{}.s[]{}.s<>[] 3.可选修饰符 /g可进行全局替换,替换所有匹配到的字符串,如:s/ / /g /s:使得 . 匹配所有字符 /i:大小写无关 4.绑定操作符 $f

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle&lt;T&gt;

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T> 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现和源码 下一篇用它们做一个多语言的demo 这两个是事件的订阅和广播,很强大,但用的时候要小心发生不必要的冲突. 先看一下它的实现思想 在Caliburn.Micro里EventAggregator要以单例的形式出现这样可以

JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程 1.文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器. DOM解析器就是完成结构化文档和DOM树之间的转换关系. DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树 从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档 2.DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的"内容",即返回的某个元素的开始标签.结束标签之间的字符串内容(不包含其它

swift学习笔记(三)关于拷贝和引用

在swift提供的基本数据类型中,包括Int ,Float,Double,String,Enumeration,Structure,Dictionary都属于值拷贝类型. 闭包和函数同属引用类型 捕获则为拷贝.捕获即定义这些常量和变量的原作用域已不存在,闭包仍然可以在闭包函数体内引用和修改这些值 class属于引用类型. Array的情况稍微复杂一些,下面主要对集合类型进行分析: 一.关于Dictionary:无论何时将一个字典实例赋给一个常量,或者传递给一个函数方法时,在赋值或调用发生时,都会