20、字符串操作常见函数

字符串与字符数组都是描述由多个字符构成的数据,字符串借用字符数组来完成处理。但请注意:

(1)表示字符串数据用双引号表示,而字符数据用单引号。

(2)字符串的长度可以根据串中字符个数临时确定,而字符数组的长度必须事先规定。

(3)对字符串,系统在串尾加’\0’作为字符串的结束标志,而字符数组并不要求最后一个字符为’\0’。

(4)用字符数组来处理字符串时,字符数组的长度应比要处理的字符串长度大1,以存放串尾结束符’\0’。

例如:

staticchar city[9]={ ’c’,’h’,’a’,’n’,’g‘,’s’,’h’,’a’,’’0\'}.可用字符串描述为:

staticchar city[9]={ "changsha"}或"changsha";

上述两条语句可分别理解为用字符数组来处理字符串,用字符串对字符数组初始化。但千万请注意不能在程序中给字符数组赋值。
    比如你定义了一个字符数组char str[10];
    在程序中:
    printf("please input str\n");
    //scanf("%s",str);
    str="good"; //这就是错的
    str[10]="good";//也是错的
    而如下就是对的:
    char str[10]="tood";
    char *strr="good";
    也就是字符数组只能在定义初始化时赋值或通过输入赋值,而不能中途直接赋值。

下面介绍用字符数组来处理字符串的一些整体操作。

1.输入输出

输入输出用scanf()、printf()函数完成,采用”%s”格式。输入输出参数用字符数组名。n

       printf函数的用法与scanf函数类似,输出参数可以是字符串常量,一般格式为:

       printf("%s",字符数组名或字符串常量)。如:

char  x[10]="Hi, all.\n";

printf("%s",x);

printf("%s","Hello.\n");

再如,有如下程序:

 

main()

{charcomp[:9];

scan{(”%s”,comp);/*本身就是地址,不需加地址运算符*/

print{COMP=%s”,comp);

}

输入数据:CHINAONE

运行结果:COMP—CHINAONE

说明:

(1)输入字符串数据时不需用界定符。

(2)输入多个字符串数据时,以空格分隔数据。如果字符串数据本身包含有空格字符,需采用特殊处理。

(3)输出先找到存放字符串的字符数组的首地址,遇串尾结束符’\0’结束。输出字符不包括串尾结束符’\0’。

(5)如果字符数组长度大于字符串实际长度,也只输出到’\0’结束。

2.字符串处理函数

puts()与gets()函数包含在头文件stdio.h中,字符串处理函数包含在头文件string.h中,用#include,,String.h”指明。

在以下的函数中,参数str、str1、str2为字符数组类型或指向字符的指针类型。

(1)puts(str)

输出指定字符串。参数可以为字符串常量。

会在结束时自动换行。

 

(2)gets(str)

从键盘输入字符串至字符数组str中,输入的字符串可以包含空格。函数的返回值是字符数组str的首地址。具体如下:

使用gets函数可输入一句话(包含空格、制表符),其语法为:

              gets( 字符数组 )

存入字符数组的是一个字符串(以 '\0' 结束),但不包括回车符

              char s[100];

              gets(s);

若输入是(“_”为空格):  _ _I'm_a_sport_ _ 

则s的内容为"_ _I'm_a_sport_ _"

(3)strcpy(strl,str2)

将str2的值复制到strl中,实际上完成字符串的赋值操作。要求strl的长度大于str2的长度,第二个参数可以是字符串常量。

(4)strcat(strl,str2)

将str2的值连接到strl中原有值的后面。注意strl必须足够大,以便能容纳两个字符数组中的所有值。连接完成后,两个字符串并成一个字符串,第一个字符串后面的原结束符自动取消。

(5)strcmp(st1,str2)

     比较strl和str2,若两者相同,返回函数值为0;若strl大于str2,返回函数值为一个正整数;若strl小于str2,返回函数值为一个负整数。字符串比较规则与其它语言相同,将两个字符串中的字符从左至右依次比较,如果全部字符相同,则认为相等;若出现不同字符,则以第一个不同字符比较结果为准。 两个参数可以是字符串常量。
       字符串比较大小的概念:

    字符串的大小由字符串中的字符的编码决定,对于任意两个字符串,从它们的第一个字符开始比较,若相同,则继续比较下一个字符,直到出现不同的字符或者遇到了结束符。若存在不同的字符,则编码较大的字符所在的字符串较大。如果同时遇到结束符,则两个字符串相等

              "ABC"小于"AbC"

              "ABC"大于"AB"

              "123"等于"\x31\x32\x33"

关系运算符不能用来比较字符串的大小,只能使用库函数。

 

(6)strlen(str)

函数的返回值为字符串的实际长度。

(7)strlwr(str)

将字符串中大写字母转换成小写字母。

(8)strupr(str)

将字符串中小写字母转换成大写字母。

如果字符数组中包含多个’\0’,输出遇到第一个’\0’结束。

(9)strncpy(字符数组1, 字符串2, 整数n )

         strncpy函数最多复制前n个字符

(10)strncat(字符数组1,字符串2,整数n)

strncat函数仅把“字符串2”的前n个字符连接到“字符数组1”的字符串后边

(11)strcmp(字符串1,字符串2)

strncmp(字符串1,字符串2,整数n)

stricmp(字符串1,字符串2)

       函数的函数值都是整型的,如果函数值为0,表示两个字符串相等;如果函数值大于0,则“字符串1”大于“字符串2”;如果函数值小于0,则“字符串1”小于“字符串2”

strcmp函数是最常用的函数之一,从左到右逐一比较每个字符,直到遇到不同的字符或遇到字符串结束为止.

       strncmp函数只比较两个字符串的前n个字符

       用stricmp函数比较两个字符串时,将忽略字母符号的大小写

(12)strstr函数的一般形式为:

              strstr(字符串1,字符串2)

strstr函数的功能是在“字符串1”中查找“字符串2”,如果找不到,则函数返回空指针NULL,若找到了,则返回与“字符串1”中所包含的“字符串2”的首字符对应的指针

如果“字符串1”中包含“字符串2”,那么“字符串2”常被称作“字符串1”的子串

(13)char *strchr(char *str,char ch)

查找字符ch在字符串str中第一次出现的位置,查找失败,返回空指针NULL。

(14)char *strrchr(const char *s, int c)

查找字符ch在字符串s中最后一次出现的位置,查找失败,返回空指针NULL。

如char *s="123456780",*p;

p=strchr(s,'0'); 则p的值为s.

p=strrchr(s,'0');则p的值为s+8.

(15)void *memcpy(void *dest, const void *src, size_t n) 

从内存地址src拷贝n字节到内存地址dest.

void *memset(void *s, int c, size_t n)

将字符c存入内存dest开始的n字节单元中。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值