每种语言中对字符串的操做要求都比较高,掌握字符串的操做,能够帮助咱们对字符串进行更好的封装和拆分,完成信息的传递(发送和接受)缓存
字符串在内存中的存储方式(一个字符对应一个字节,内存中存贮的字符的ASSIC码值)函数
整数在内存中的存储本质(将1234的字符转化为其对象的ASCII值存贮在内存中)spa
字符串的读取规则(遇到结束符就结束,无论后面还有没有字符,若是都没有结束符,就会使程序卡死在那里。).net
整数的读取显示和内存中的存储(与大小字节序有关)指针
详细请看 http://my.oschina.net/u/1783725/blog/647973code
'0',NULL,0 这三个都是字符串的结束符,在内存中占用一个字节,内存值为 0x00orm
printf(" \'0\'=%d \'\\0\'=%d NULL=%d 0=%d\n",'0','\0',NULL,0); //打印出整型值(十进制) printf(" \'0\'=%#x \'\\0\'=%#x NULL=%#x 0=%#x \n",'0','\0',NULL,0); //打印出整型值(十六进制)
输出: htm
'0'=48 '\0'=0 NULL=0 0=0 //能够看出字符串结束符的整型值都是0 '0'=0x30 '\0'=0 NULL=0 0=0 //能够看出字符串结束符的整型值都是0
意义:就是在读取字符串时,遇到它(字符串结束符),就算读到字符串的结尾了,不在管后面还有没有字符串了。对象
三、字符串的截取strstr(str1,str2)和strtok(str1,str2)blog
strstr(str1,str2) 函数,获取指定字符串首次出现的位置。
用于判断字符串str2是不是str1的子串。若是是,则该函数返回str2在str1中首次出现的地址;不然,返回NULL。
包含文件:string.h
原型:char
*strstr(char
*str1, const
char
*str2);
参数说明
str1: 被查找目标
str2:要查找对象
该函数返回str2第一次在str1中的位置,若是没有找到,返回NULL
实例:
#include <stdlib.h> #include <string.h> int main(void) { char srcString[] = "myFamily = myMothet + myFather"; //源字符串 char splitString[] = "my"; //须要判断位置的字符串 char *result = NULL; printf("source string is \"%s\" \n",srcString); result = strstr(srcString,splitString); //依次打印出全部"abc"出现的位置及其后的字符串 while(result != NULL) { printf("result is index:%d \"%s\"\n",(int)(result-srcString),result); result = strstr(result+strlen("abc"),splitString); } return 0; }
输出结果:
source string is "myFamily = myMothet + myFather" result is index:0 "myFamily = myMothet + myFather" result is index:11 "myMothet + myFather" result is index:22 "myFather"
strtok(str1,str2) 函数,根据str2的分隔符集合,获取被分隔符分割出的子字符串的集合
获取被分隔符分割出的子字符串的集合,若是分隔标记没有找到,函数返回NULL,第一次调用str1 指向做为标记的分隔符。以后因此的调用str1 都应为NULL。
包含文件:string.h
原型:char
*strtok(char
*str1, const
char
*str2);
参数说明
str1: 被查找目标
str2:分割符集合
该函数返回分隔符依次在str1中出现的位置,若是没有找到,返回NULL
实例:
#include <stdlib.h> #include <string.h> int main(void) { char srcString[] = "Family=Father+Mother+Children"; //源字符串 char delims[]="=+"; //分隔符 char *result = NULL; printf("source string is \"%s\" \n",srcString); result = strtok(srcString, delims); while(result != NULL) { printf( "result is \"%s\" index:%d\n", result,(int)(result-srcString)); result = strtok(NULL, delims); } return 0; }
输出结果:
source string is "Family=Father+Mother+Children" result is "Family" index:0 result is "Father" index:7 result is "Mother" index:14 result is "Children" index:21
介绍:
char *strcpy( char *to, const char *from );
功能:复制字符串 将from 中的字符复制到字符串to,包括空值结束符。返回值为指针to。
注意:
to和from都是字符指针,若是传出参数是无符号的字符指针,须要强制类型转换(char *)(在某些编译环境下需注意)
错误教训:
strcpy(teacher1.name,teacher2.name); teacher结构体中的name为unsigned char name[20] 报错 invalid conversion from `unsigned char*' to `char*
功能:函数返回字符串str 的长度( 即空值结束符以前字符数目)。
六、strcat()函数详解
介绍:char *strcat( char *dest, char *src);
功能:函数将字符串src 链接到字符串dest的末端,并返回指针dest.
本质:首先在字符串dest中寻找字符串结束符(若是没有找到,将不会作任何链接),找到后将字符串src(不包括src的结束符)插入到字符串dest最后一个字符与结束符之间。
证实:
void printBuff(char buff[],int len) { int num,numCount; numCount = len; printf("数据的内存显示:"); for(num=0; num < numCount; num++) { printf("%x ",buff[num]); } printf("\n"); } int main() { char src[20] = {0}; char str1[10] = "abcd"; char str2[6] = "efghh"; memset(src+1,1,sizeof(src)-1); /*将缓存中所有灌入1(第一个位置除外,由于编译器须要寻 找src的结束符,找不到的话,将不会进行链接操做),排除0(结束符的干扰) */ printBuff(src,sizeof(src)); strcat(src,str1); printf("str1链接后的字符串:%s\n",src); printBuff(src,sizeof(src)); strcat(src,str2); printf("str2链接后的字符串:%s\n",src); printBuff(src,sizeof(src)); }
输出:
数据的内存显示:0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 str1链接后的字符串:abcd 数据的内存显示:61 62 63 64 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 str2链接后的字符串:abcdefghh 数据的内存显示:61 62 63 64 65 66 67 68 68 0 1 1 1 1 1 1 1 1 1 1
(1)字符串==>整型
atof (将字符串转换成浮点型数)
atoi (将字符串转换成整型数)
atol (将字符串转换成长整型数)
strtod (将字符串转换成浮点数)
strtol (将字符串转换成长整型数)
strtoul (将字符串转换成无符号长整型数)
(2)字符串<==整型 (有两种方式,比较重要)
itoa(将整型数转换为字符串)
sprintf( char *buffer, const char *format, ... );将整型数按照指定格式转化为buffer