标签:
整理C语言字符串相关的函数,以程序方式验证,以注释方式做说明。
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 int main() 5 { 6 char *str1="hello world!"; 7 char *str2="HELLO WORLD!"; 8 int len=strlen(str1);//求的字符串长度,不包括‘\0‘在内 9 printf("len=%d\n",len); 10 11 int cmp=strcmp(str1,str2); 12 printf("cmp=%d\n",cmp); 13 //str1>str2,返回大于零的值,str1<str2返回小于零的值,等于返回0。比较方式是逐个字符比较 14 //int strcmp(char *str1,char * str2,int n),只是可以控制个数,别的和strcmp()一样 15 16 char str3[100]="hello world!"; 17 char str4[100]="HELLO WORLD!"; 18 strcat(str3,str4); 19 printf("str3=%s\n",str3); 20 //函数将字符串str4 连接到str3的末端,即抹掉str3结尾的‘\0‘,但是str4结尾的‘\0‘保留并返回指针str3。 21 //str4应该为const。str3的空间要足以容纳str3和str4,不然会发生溢出错误,此函数不安全 22 23 char str5[100]="hello world!"; 24 char str6[100]="HELLO WORLD!"; 25 strncat(str5,str6,5); 26 printf("str3=%s\n",str5); 27 //这个函数和strcat()一样,只是相对更安全,可以显式的控制链接字符个数。 28 //会抹掉str5的‘\0‘,完了会自动添加‘\0‘ 29 30 char str7[100]="hello world!"; 31 char str8[100]="HELLO WORLD!"; 32 strcpy(str7,str8); 33 printf("str7=%s\n",str7); 34 //复制str8的内容到str7中,包括‘\0‘,返回str7的指针,即全部抹掉str7的内容,换成str的 35 //前提是str7的空间要足够大可以容纳str8的内容以及‘\0‘,所以此函数是相对不安全的 36 37 char str9[100]="hello world!"; 38 char str10[100]="HELLO WORLDDDD!"; 39 strncpy(str9,str10,14); 40 len=strlen(str9); 41 printf("str9=%s\n",str9); 42 printf("str9 len=%d\n",len); 43 /* 44 译:拷贝 source 中的前 num 个字符到 destination 中去。如果在拷贝 num 个字符中遇 45 到’\0’,则在其后而补’\0’; 如果 source 的长度大于 num,在拷贝完 num 个字符后,并不 46 会在 destination 的后面追加’\0’。所在这种情况下,destination 不以’\0’结尾,读它可能 47 会越界。 48 通常作法是,依据 dest 的大小,设为 N,然后去读 N-1 个字符。然后将 dest[N-1]= 49 ‘\0’; 50 */ 51 //老师的文档如上所述,但是自己测试几次都没有出错,并且用strlen()统计也是正确的 52 //使用此函数前提也是目标字符串的空间要足够,也只是相对的安全 53 54 int a=192,b=168,c=100,d=111; 55 char str11[18]; 56 sprintf(str11,"%d.%d.%d.%d",a,b,c,d); 57 len=strlen(str11); 58 printf("str11=%s\n",str11); 59 printf("str11 len=%d\n",len); 60 //函数功能:把格式化的数据写入某个字符串缓冲区。前提是缓冲区要存的下 61 62 char str12[100]=" 123abc"; 63 int data=atoi(str12); 64 printf("str12 to data=%d\n",data); 65 /* 66 * 函数功能:将字符串转换成整型数;atoi()会扫描参数 nptr 字符串,跳过前面的空格字 67 * 符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时(‘\0‘)才结束 68 * 转化,并将结果返回(返回转换后的整型数),若是首个就是字符,那就返回0 69 * 在stdlib.h中 70 */ 71 72 data=123; 73 char str13[100]; 74 itoa(data,str13,10); 75 printf("base=10,str13=%s\n",str13); 76 itoa(data,str13,2); 77 printf("base=2,str13=%s\n",str13); 78 /* 79 *根据指定的进制(base),将整型数据转化为以’\0’结尾的字符串,保存到 str 指向的字符数组中。 80 * stdlib.h中 81 */ 82 83 char str15[100]="hello world!"; 84 char *p=strchr(str15,‘l‘); 85 printf("l in str15 first=%s\n",p); 86 //函数功能:返回字符串 str 中首次出现字符 c 的位置指针,返不到返回 NULL。 87 88 char str16[100]="ll"; 89 p=strstr(str15,str16); 90 printf("str16 in str15 first=%s\n",p); 91 //函数功能:strstr() 函数搜索字符串 str2 在字符串 str1 中是否出现。找到所搜索的字符 92 //串,则该函数返回第一次匹配的字符串的地址;如果未找到所搜索的字符串,则返回NULL 93 94 char str17[100]="aaa@bbb@ccc@ddd"; 95 char *str18=strtok(str17,"@"); 96 printf("str18=%s\n",str18); 97 int i=0; 98 for(i=0;i<3;i++){ 99 str18=strtok(NULL,"@"); 100 printf("str18=%s\n",str18); 101 } 102 /* 103 * 功能:分解字符串为一组字符串。s 为要分解的字符串,delim 为分隔符字符串。 104 说明:首次调用时,s 指向要分解的字符串,之后再次调用要把 s 设成 NULL。 105 strtok 在 s 中查找包含在 delim 中的字符并用 NULL(‘\0‘)来替换, 直到找遍整个字符串。 106 返回值:从 s 开头开始的一个个被分割的串。当没有被分割的串时则返回 NULL。 107 所有 delim 中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。 108 */ 109 110 char str19[20]={0}; 111 //memset(str19,‘y‘,sizeof(str19)); 112 memset(str19,‘y‘,5); 113 printf("memset str19=%s\n",str19); 114 //功能: 函数拷贝ch 到buffer 从头开始的count 个字符里, 并返回buffer指针。 115 //memset() 可以应用在将一段内存初始化为某个值。 116 //例如:memset( the_array, ‘\0‘, sizeof(the_array) ); 117 //这是将一个数组的所以分量设置成零的很便捷的方法。 118 119 char str20[100]="hello world!"; 120 char str21[100]="HELLO WORLD!"; 121 memcpy(str20,str21,5); 122 printf("memcpy str21 to str20=%s\n",str20); 123 //定义:void *memcpy( void *to, const void *from, size_t count ); 124 //功能:函数从from中复制count 个字符到to中,并返回to指针。如果to 和 from 重叠,函数行为不确定。 125 //应用于字符串作用类似于strncpy() 126 127 char str22[100]="hello world!"; 128 char str23[100]="HELLO WORLD!"; 129 memmove(str22,str23,5); 130 printf("memmove str23 to str22=%s\n",str22); 131 //功能: 与mencpy相同,不同的是当to 和 from 重叠,函数正常仍能工作。 132 133 return 0; 134 }
标签:
原文地址:http://www.cnblogs.com/luojialin/p/4782329.html