C语言中字符串的理解和经常使用的字符串操做

        每种语言中对字符串的操做要求都比较高,掌握字符串的操做,能够帮助咱们对字符串进行更好的封装和拆分,完成信息的传递(发送和接受)缓存

一、字符串的本质

    字符串在内存中的存储方式(一个字符对应一个字节,内存中存贮的字符的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的子串。若是是,则该函数返回str2str1中首次出现的地址;不然,返回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

四、strcpy()函数使用

        介绍:

        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*

五、size_t strlen( char *str )函数

    功能:函数返回字符串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

相关文章
相关标签/搜索