常见字符串问题的处理方法

① gets函数和puts函数在字符串中的应用

1.gets()函数

gets函数用于接收一个字符串,括号内填写的是一个字符串的首地址。例如:

#include <stdio.h>
int main()
{
char arr[20]={'\0'};
gets(arr);  //这里gets括号中的是字符数组的数组名,因为我们知道数字名就是首地址            
return 0;    //这里gets的作用就是从键盘上读入字符然后存入数组arr【20】里
}

2.puts()函数

puts函数用于输出一个字符串,括号中填写的也是需要输出字符的首地址。例如:

#include <stdio.h>
int main()
{
char arr[20]="abcdef";
puts(arr);  //这里也是填写了数组名,同理因为数组名是首地址
return 0;
}

从上面的代码可知puts函数和gets函数都包含在头文件<stdio.h>中。 

我们简单的了解了gets函数和puts函数在字符串中的作用,下面我们来看看实际的一些字符串问题 

 ②求字符串长度

对于求字符串长度在c语言中引入了一个strlen()函数,该函数的作用就是求出一个字符串的长度。strlen()函数包含于头文件<string.h>中,下面详细介绍一下该函数。

标准形式:strlen(字符串s)

作用:计算字符长度,当遇到‘\0’时停止,注意‘\0’不计入字符串长度中

#include <string.h>
#include <stdio.h>
int main()
{
	int i = 0;
	char arr[10] = "abcef";
	i = strlen(arr);  //用i来接收strlen函数的返回值
	printf("%d", i);
	return 0;
}

 

 可见strlen()函数计算的是字符串的字符个数,并没有把‘\0’计算在内。

可见结果为3,验证了strlen()函数遇到'\0'就停止计算和不会将'\0'计算在内的两个性质。 

 那么我们是否可以自己编一个程序来实现strlen()函数的功能呢?答案是可以的,程序如下

#include <string.h>
#include <stdio.h>
int main()
{
	char arr[80] = { '\0' };
	int i = 0;
	int lenth = 0;
	gets(arr);
	puts(arr);
	while (arr[i++] != '\0')  //跳出循环的判断条件
	{
		lenth++;
	}
	printf("%d", lenth);
	return 0;
}

 

从运行结果来看上面的函数能完成strlen()函数的功能。 

 ③字符串的复制

对于字符串的复制,在c语言中引入了strcpy()函数,该函数同样也包含在头文件<string.h>中,下面我们也来仔细了解一下strcpy()函数。

基本形式:strcpy(字符串s1,字符串s2)

作用:将字符串将字符串s1复制成字符串s2

注意事项:字符串s1要能够容纳字符串s2,两个字符串不能有重叠

下面我们来使用一下该函数,例如: 

#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
int main()
{
	char arr1[20] = "abcde";
	char arr2[20] = "ABCDE";
	strcpy(arr1, arr2);
	puts(arr1);
	return 0;
}

 

我们从运行结果可以看出,我们成功地将arr1复制成了arr2,这就是strcpy()函数的效果。

那么同理我们能不能写一个代码来实现strcpy()函数的功能呢?话不多说,我们直接上代码。

#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	char arr1[20];
	char arr2[20];
	gets(arr1);
	gets(arr2);
	for (i = 0, j = 0; arr2[j] != '\0'; i++, j++)
	{
		arr1[i] = arr2[j];
	}
	arr1[i] = '\0';  //这里在进行复制是因为循环结束的条件是arr2[j]=='\0',所以arr1[i]并没有复制,
	puts(arr1);      //所以我们在后面需要再进行赋值
	return 0;
}

 

④将两个字符串拼接起来 

 为了方便实现这一效果,c语言中引入了strcat()函数,该函数的头文件也是<string.h>,下面我们也来详细了解一下这个函数。

基本形式:strcat(字符串s1,字符串s2)

作用:将字符串s2拼接到字符串s1中,字符串s1中的'\0'会被覆盖

下面我们来看一下该函数的应用:

#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
int main()
{
	char arr1[20];
	char arr2[20];
	gets(arr1);
	gets(arr2);
	strcat(arr1, arr2);
	puts(arr1);
	return 0;
}

 

从运行结果可以看出我们输入的两个字符串拼接到了一起。

 我们再来写一个代码来实现strcat()函数的功能,如下:

#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	char arr1[20];
	char arr2[20];
	gets(arr1);
	gets(arr2);
	for (j = strlen(arr1), i = 0; arr2[i] != '\0'; i++, j++)
	{
		arr1[j] = arr2[i];
	}
	arr1[j] = '\0';
	puts(arr1);
	return 0;
}

 

可见该代码实现了两个字符串的拼接。

⑤将字符串中的小写字母转换成大写字母和将大写字母转换成小写字母

 这里c语言引入了两个函数分别是strupr()函数和strlwr()函数,下面接着介绍一下它们:

strupr()函数

基本形式:strupr(字符串s)

作用:将字符串中所有的小写字母转换成大写字母

来看一个代码:

#pragma warning(disable:4996)
#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
int main()
{
	char arr[20] = "abc";
	strupr(arr);
	puts(arr);
	return 0;
}

 

成功实现了小写字母转成大写字母。

strlwr()函数

基本形式:strlwr(字符串s)

作用:将大写字母转换成小写字母

该函数的应用只需将strupr()函数的代码稍作调整即可,这里就不再进行代码演示了。

⑥两个字符串间的比较

c语言中引入了strcmp()函数。

基本形式:strcmp(字符串s1,字符串s2)

作用:将两个字符串进行比较

注意:这里的比较不是比较字符串的长度,而是比较字符所对应的ascll码值,而且是一个一个的字符从前往后比较

得到结果:如果字符串s1小于s2,得到的结果小于0,一般为-1;

                  如果字符串s1等于s2,得到的结果为0;

                  如果字符串s1大于s2,得到的结果大于0,一般为1;

下面我们通过代码来更好的理解一下:

#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
int main()
{
	int num = 0;
	char arr1[20];
	char arr2[20];
	gets(arr1);
	gets(arr2);
	num=strcmp(arr1, arr2);
	printf("%d", num);
	return 0;
}

 

因为b的ascll码值大于a的ascll码值所以,字符串s1小于s2,得到-1;

 当两个字符串相等时,得到0;

同理字符串s1大于s2的时候,得到结果1,大家可以自己去验证一下。

当然当第一个字符的ascll码值相等时,就继续比较第二个直到比较完所有字符。

今天c语言技巧的分享就到这,希望大家都能有所收获,最后要是博客中有什么不懂的或者不对的欢迎大家在评论去留言,我会在空闲时,尽量帮大家解决问题,一起进步。

 

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值