使用字符串处理函数

这里我们介绍几种专门处理字符串的函数。

puts函数

这个函数的作用是输出字符串。
其一般形式为:
puts(字符数组)
起作用是将一个字符串(以’\0’结束的字符序列)输出到终端。
相当于是printf函数,但其作用的只是字符串。
如:
在这里插入图片描述
注意不要把puts里面的数组写成数组元素。

在puts函数输出的字符串中可以包含转移字符,这个跟printf函数是一样的,如:
在这里插入图片描述

gets函数

这个函数是输入字符串的函数。
其一般形式为:
gets(字符数组)

起作用是从终端输入一个字符串到字符数组,并得到一个函数值。
跟scanf函数的作用是一样的,只不过这个只作用于字符串。

在使用gets函数的时候,如果我们要给一个数组abc,我们要注意这个给的不是三个字符,而是四个,还有一个是’\0’
而对于return 0;返回值返回的函数值是字符数组的第一个元素的地址,
一般利用gets函数的目的是向字符数组输入一个字符串,而不大关心其函数值。

用puts函数和gets函数只能输入或输出一个字符串。
gets函数在VS上的使用需要改成gets_s的格式。

strcat函数

这个函数时字符串连接函数。

其一般形式是:
strcat(字符数组1,字符数组2)

strcat是STRing CATenate(字符串连接)的缩写。
其作用是把两个字符数组中的字符串连接起来,
把字符串2接到字符串1的后面,结果放在字符数组1中,
函数调用后得到一个函数值——字符数组1的地址。
如:
char c1[40]={“I am a “};
char c2[]={“boy”};
printf(”%s”,strcat(c1,c2);
在这里插入图片描述

我们在进行这个操作时,需要用到头文件<string.h>。

对于这个函数,有如下要求:
1.字符数组1必须足够大,以容纳连接后的新字符串。
在这里插入图片描述
像这个,c1[]。
这个容易报错。
2.连接前两个字符串的后面都有’\0’,连接时将字符串1后面的’\0’取消,只在新字符串后保留’\0’。

strcpy和strncpy函数

这两个函数时字符串复制函数。

其一般形式为:
strcpy(字符数组1,字符串2)

strcpy是stringcopy(字符串复制)的简写。
它表示“字符串复制函数”,作用是将字符串2复制到字符数组1中去。
如:
在这里插入图片描述
这个也有一些注意条件:
1.字符数组1必须定义的足够大,一边容纳被复制的字符串2.
2.字符数组1 必须写成数组名形式,字符串可以是字符数组名,也可以是一个字符串常量。
如:
在这里插入图片描述
3.如果在复制前未对字符数组初始化或赋值,则字符数组个字节中的内容时无法预知的,
复制时将字符串和其后面的’\0’一起复制到字符数组中,
取代字符数组中的对应位置的字符,后面的位置的数值可能是原字符数组的内容,也可能都 是’\0’
4.不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。
字符数组名时一个地址常量,它不能改变值,数组名不能被赋值。
只能用strcpy函数将一个字符串复制到另一个字符数组中去。
用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。
5.可以用strncpy函数将字符串前面n个字符复制到字符数组中去,
如:
在这里插入图片描述
这个就表示把字符串的前五个元素复制后给了字符数组c1,
后面出现的字是因为系统没找到’\0’,如果在字符串中输入‘\0’就不会出现:
在这里插入图片描述

strcmp函数

这个函数时字符串比较函数。

其一般形式为:
strcmp(字符串1,字符串2)

strcmp时string compare(字符串比较)的缩写,
它的作用是比较字符串1和字符串2。

如:
strcmp(str1,str2)
strcmp(“China”,“Korea”)

字符串比较的规则是:
将两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到’\0’为止。
1.如果全部字符相同,则认为两个字符串相等。
2.若出现不相同的字符,则以第一对不相同的字符的比较结果为准。
如:
“A”<“B”,“a”>“A”,“computer”>“compare”,“these”>that",“1A”>“$20”

对于英文,英文字典后面的大,小写字母比大写字母大。

比较的结果由函数值带回,
1.如果字符串1和字符串2相同,则函数值为0
2.如果字符串1>字符串2,则函数值为一个正整数
3.如果字符串1<字符串2,则函数值为一个负整数

注意,对两个字符串的比较,只能是用strcmp函数,如果只是用下面这种方法:
if(str1>str2)
这是不行的,因为数组名只是代表地址,而不代表数组中的全部元素。

strlen函数

这个函数是测字符串长度的函数

其一般形式为:
strlen(字符数组)

strlen是string length(字符串长度)的缩写。
它是测试字符串长度的函数。
函数的值为字符串的实际长度(不包含’\0’)
如:
在这里插入图片描述

strlwr函数

这个是转换为小写函数

其一般形式为:
strlwr(字符串)

strlwr是string lowercase(字符串小写)的缩写。
函数的作用就是将字符串中大写字母换成小写字母。
如:
在这里插入图片描述
在VS上面,这个strlwr函数不能直接用,要写成 _strlwr的形式。

strupr函数

这个函数是转换为大写的函数,

其一般形式为:
strupr(字符串)

strupr是string uppercase(字符串大写)的缩写。
函数的作用是将字符串中小写字母转换成大写字母。
再次不在举例。

这些函数都包含在<string.h>这个头文件中
使用时要先引用

本篇内容到此结束。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用循环遍历字符串a的每一个字符,然后将其逐个复制到字符串b,直到遍历完整个字符串a。具体实现可以参考以下代码: ``` #include <stdio.h> int main() { char a[100], b[100]; int i = ; printf("请输入字符串a:"); scanf("%s", a); while (a[i] != '\') { b[i] = a[i]; i++; } b[i] = '\'; // 注意要在字符串末尾添加'\',表示字符串的结束 printf("复制后的字符串b为:%s\n", b); return ; } ``` 这样就实现了字符串处理函数strcpy()的功能,但没有使用strcpy()函数。 ### 回答2: 在C语言字符串是一组字符序列,以'\0'为结尾的一维字符数组。在输入字符串a后,需要获取a的长度,并为字符串b分配相应长度的空间。在申请空间时需要注意,字符串结束符'\0'也需要占用一个空间。申请空间后,需要使用循环遍历数组,将a每一个字符复制到b,直到复制完整个字符串。 以下是具体的代码实现: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char a[100], b[100]; int length, i; printf("请输入字符串:"); scanf("%s", a); length = strlen(a); for (i = 0; i <= length; i++) { b[i] = a[i]; } printf("字符串b为:%s", b); return 0; } ``` 在上述代码,通过strlen()函数获取字符串a的长度,然后使用for循环依次将a每个字符复制到b,注意循环的终止条件为i <= length,包括了字符结束符'\0'的复制。最后使用printf()函数输出字符串b即可。 需要注意的是,上述代码只是一个简单的实现方式,如果字符串长度过长可能会导致数组越界等问题。实际应用,可以使用动态内存分配等方式来解决这些问题。 ### 回答3: 字符串是一段字符序列,在C语言字符串以\0结尾的字符数组表示。字符串处理是程序常用的操作之一,而字符串复制是其常见的操作之一。在C语言,可以使用strcpy()函数实现字符串复制,但是本题要求不能使用函数,下面我们来介绍如何用其他方式实现字符串复制。 方法一:循环实现 可以用for循环或while循环遍历字符串a,将每一个元素赋值给字符串b,直到遍历完整个字符串a,代码如下: ```c #include <stdio.h> #include <stdlib.h> int main() { char a[100], b[100]; int i = 0; printf("请输入字符串a:"); gets(a); while (a[i] != '\0') { b[i] = a[i]; i++; } b[i] = '\0'; printf("字符串b为:%s", b); system("pause"); return 0; } ``` 在这个代码,循环遍历的条件为a[i] != '\0'且每次循环将a[i]赋值给b[i],并将i逐个自增,直到将完整个字符串a赋值给字符串b。在最后将b[i]赋值为'\0',表示字符串b的结束符。 方法二:指针实现 由于字符串实际上是字符数组,我们可以使用指针来操作。可以通过将字符串a的起始地址赋值给字符串b的起始地址,再通过指针将a的每个字符复制到b,代码如下: ```c #include <stdio.h> #include <stdlib.h> int main() { char a[100], b[100]; char *pa = a, *pb = b; printf("请输入字符串a:"); gets(a); while (*pa != '\0') { *pb++ = *pa++; } *pb = '\0'; printf("字符串b为:%s", b); system("pause"); return 0; } ``` 在指针实现使用char *pa和char *pb来指向字符串a和字符串b的起始地址。通过指针操作符*来赋值,此时pb已经指向了字符串b的首地址,每次操作赋值后,指针自增,再操作下一个元素,直到遍历完整个字符串a。在最后将b的结束符设定为'\0'。 以上两种方法都可以实现字符串复制的操作,而且两种方法都比较简单易懂。希望大家能够理解并掌握。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值