您的位置:首页 > 其它

C-字符串

2015-12-21 19:21 267 查看
1、字符串的概念

字符串是位于双引号中的字符序列,在内存中以“\0”结束,所占字节比实际多一个。

注意: C语言中没有字符串变量,可以用字符数组来存放字符串。

2、字符数组

char 数组名[常量表达式] ;

例:

char c[10];

注意:定义字符数组时,应确保数组长度比字符串长度至少多1。

3、字符数组的初始化

1)用数组表示:

(1)用多个字符赋值的情况与数组的初始化方法一样!

如:

char str[] = {‘a’,’b’,’c’,’\0’};

注意:如果申明时不指定数组长度,请记得在字符结尾加’\0’否则可能会输出奇怪的东西或者运行时程序崩溃

注意:未被使用的元素均被自动初始化为0

(2)直接用字符串赋值 语法:

char 数组名[] = “字符串内容”; 或 char 数组名[] = {“字符串内容”};

如:

char str[] = “abc”; 或 char str[] = {“abc”};

注意:不需要加\0,编译器会自动添加,如加上\0也不会报错,并且也是会正常打印出数 据,但是数组的长度会加一个!

2)用指针表示

用char类型的指针也可以表示一个字符串

语法:

char *指针名 = “字符串”;

例:

char *p = “abc”;

4、用数组表示和用指针表示的区别:

1)用数组表示法可以接收用户输入的字符串并保存起来,但是指针不可以

2)用数组表示法可以修改字符串,但是指针不可以

5、字符数组的输入输出

1)使用的格式字符串为“%s”,表示输入、输出的是一个字符串。

用printf函数和scanf函数一次性输出输入一个字符数组中的字符串,而不必使用循环语句逐个地输入输出每个字符。

注意:在C语言中规定,数组名代表了该数组的首地址,整个数组是以首地址开头的一块连续的内存单元。

2)字符串输出函数 puts

格式: puts(字符数组名)

功能:把字符数组中的字符串输出到显示器。 即在屏幕上显示该字符串。 从程序中可以看出puts函数中可以使用转义字符,因此输出结果成为两行。puts函数完全可以由 printf函数取代。 当需要按一定格式输出时,通常使用printf函数。

字符串输入函数 gets

格式: gets (字符数组名)

功能:从标准输入设备键盘上输入一个字符串。

注意:gets函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束,这是与scanf函数不同的。

6、字符串的常用函数

C语言��供了丰富的字符串处理函数,大致可分为字符串的输入(scanf)、输出(printf)、合并(strcat)、修改、比较(strcmp)、转换、复制(strcpy)、搜索(strstr、strchr)几类。

用于输入输出的字符串函数,在使用前应包含头文件”stdio.h”,

使用其它字符串函数则应包含头文件”string.h”。

1)字符串连接函数 strcat

格式: strcat(字符数组名1,字符数组名2) 功能:把字符数组2中的字符串连接到字符数组1中字符串的后面,并删去字符串1后的串标志 “\0”。本函数返回值是字 符数组1的首地址。

2)字符串拷贝函数strcpy

格式: strcpy(字符数组名1,字符数组名2) 功能:把字符数组2中的字符串拷贝到字符数组1中。串结束标志“\0”也一同拷贝。字符数名2, 也可以是一个字符串常 量。这时相当于把一个字符串赋予一个字符数组。 本函数要求字符数组1应有足够的长度,否则不能全部装入所拷贝的字符串。

3)字符串比较函数strcmp

格式: strcmp(字符数组名1,字符数组名2) 功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。 字符串1=字符串2,返回值=0; 字符串1>字符串2,返回值>0; 字符串1<字符串2,返回值<0。 本函数也可用于比较两个字符串常量,或比较数组和字符串常量。

4)测字符串长度函数strlen

格式: strlen(字符数组名) 功能:测字符串的实际长度(不含字符串结束标志‘\0’)并作为函数返回值。

5)字符串查找

最简单的是查找字符串查找字符:

char *strchr(const char *s, int c);

至于参数为什么是int,历史遗留问题,这里不多讨论。函数返回在s中找到的第一个c的位置的指针,注意的是,字符串末尾的‘\0’也是可以被查找的。实现如下:

[cpp] view plaincopy

char *my_strchr(const char *s, int n){

assert(s != NULL);

char c = (char)n;

do{

if(*s == c)

return (char *)s;

}while(*s++);

return NULL;

}

还有查找字符串的函数strstr:

char *strstr(const char *s1, const char *s2);

函数返回s2在s1中出现的首字符的位置,实现如下:

[cpp] view plaincopy

char *my_strstr(const char *s1, const char *s2){

assert(NULL!=s1 && NULL!=s2);

size_t len = strlen(s2);

while(*s1){

if(!strncmp(s1,s2,len))

return (char *)s1;

s1++;

}

return NULL;

}

c标准库中并没有定义类似strnchr和strnstr的限定查找范围的函数,当然需要的话我们可以自己定义
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: