您现在的位置是:首页 >学无止境 >【C语言】字符串---刷题篇网站首页学无止境

【C语言】字符串---刷题篇

釉色清风 2024-06-14 17:20:31
简介【C语言】字符串---刷题篇


1.统计字符串中元音字母的字数
2.使用起泡法和选择法将字符串按ASCII码值从小到大排列
3.将字符串中的数字字符倒置,即‘0’变‘9’、‘1’变‘8’、…、‘9’变‘0’.例如:字符串“a1b2c3d4e9f0”倒置变为“a8b7c6d5e0f9
4.将一个字符串中从第m个字符开始的全部字符复制成为另一个字符串
5.有10个字符串,每个字符串表示一段文字,将10个字符串连接成一篇文章,保存到一维数组并输出。
6.在全班50个学生的姓名中,查找指定姓名的学生,若找到则输出该学生姓名,否则输出无此人。



统计字符串中元音字母的字数

#include <stdio.h>
int main (void)
{
	char str[128]={0};//给字符串数组初始化为一个空字符串
	int count=0,i;
	printf("请输入一个字符串:
");
	gets(str);
	for (i=0;str[i]!=0;i++)
		if (str[i]=='a'|| str[i]=='e'|| str[i]=='i'|| str[i]=='o' || str[i]=='u')
			count++;
	printf("%d
",count);
	return 0;
}

使用起泡法和选择法将字符串按ASCII码值从小到大排列

#include <stdio.h>
#include <string.h>
int main (void)
{
	char str[128]={0};//给字符串数组初始化为一个空字符串
	int count=0,i,k;
	char temp;//设置中间变量
	printf("请输入一个字符串:
");
	gets(str);
	//选择法排序
	for(i=0;i<strlen(str);i++)
		for (k=i+1;str[k]!=0;k++)
			if (str[k]<str[i])
			{
				temp=str[i];
				str[i]=str[k];
				str[k]=temp;
			}
	for (i=0;str[i]!=0;i++)
		printf("%c",str[i]);
	printf("
");
	return 0;
}
#include <stdio.h>
#include <string.h>
int main (void)
{
	char str[128]={0};//给字符串数组初始化为一个空字符串
	int count=0,i,k,n;
	char temp;//设置中间变量
	printf("请输入一个字符串:
");
	gets(str);
	n=strlen(str);//求字符串的长度
	//起泡法排序
	//一共进行n-1次比较
	//分析:第1趟,进行n-1次比较(最后一次是n-2与n-1比较);
	//第2趟,进行n-2次比较(最后一次是n-3与n-2比较)
	for (i=1;i<n;i++)
		for (k=0;k<n-i;k++)
			if (str[k]>str[k+1])
			{
				temp=str[k];
				str[k]=str[k+1];
				str[k+1]=temp;
			}
	for (i=0;str[i]!=0;i++)
		printf("%c",str[i]);
	printf("
");
	return 0;
}

将字符串中的数字字符倒置,即‘0’变‘9’、‘1’变‘8’、…、‘9’变‘0’.例如:字符串“a1b2c3d4e9f0”倒置变为“a8b7c6d5e0f9”
这个题主要利用字符0~9的ASCII码值,字符’0’的ASCII值为48,依次,’1‘为49……’9‘为57

#include<stdio.h>
int main(void)
{
	char str[128]={0};
	int i;
	printf("请输入一个含有数字的字符数组:
");
	gets(str);//输入str
	for (i=0;str[i]!=0;i++)
		if (str[i]>=48 && str[i]<=57)//判断是否是字符0~9
			str[i]=105-str[i];//对应项的ASCII值相加为105
	for (i=0;str[i]!=0;i++)//输出字符串
		printf("%c",str[i]);
	return 0;
}

将一个字符串中从第m个字符开始的全部字符复制成为另一个字符串

#include <stdio.h>
int main (void)
{
	char str1[128]={0},str2[128]={0};//字符数组初始化为一个空字符串
	//将要输出的字符串放到字符数组str2中
	int m;
	int i,k=0;
	//输入数据
	gets(str1); //输入字符串
	scanf("%d",&m);//输入m
	//第m个字符串的下标为m-1
	for (i=m-1;str1[i]!=0;i++)//依次将m个字符之后的字符“移到”str2中
	{
		str2[k]=str1[i];
		k++;
	}
	printf("%s
",str2);//输出str2
	return 0;
}

一点改进:
前面几个程序都是利用循环输出的字符串,即对字符数组中的元素依次进行输出。(我当时的顾虑:因为定义的字符数组比较大,后面的全为“0”,可能0也会输出?)
但自己对“0”的理解不对,字符数组的“0”即是""(字符串结束的标志),而不是字符’0‘;
所以由于前面定义时就对str2进行了初始化,使得str2中的每一个元素都是’‘,当对str2中的元素依次赋值,直到赋值结束,其后面的为赋值的位置都是’’,直接用printf()函数输出字符串即可。
有10个字符串,每个字符串表示一段文字,将10个字符串连接成一篇文章,保存到一维数组并输出。

#include <stdio.h>
#include <string.h>
int main (void)
{
	char str[10][128]={0};//二维数组全部初始化为0
	char str2[128]={0};//将最终连接好的文字放入一维数组
	int i;
	//将二维数组看作是特殊的一维数组,分别是str[0]、str[1]…str[9]
	for (i=0;i<10;i++)
		gets(str[i]);//输入10组文字
	for (i=0;i<10;i++)
		strcat(str2,str[i]);//利用字符串连接函数,依次连接
	printf("%s
",str2);
	return 0;
}

在全班50个学生的姓名中,查找指定姓名的学生,若找到则输出该学生姓名,否则输出无此人。

#include <stdio.h>
#include <string.h>
#define count 5
int main (void)
{
	char str[count][128]={0};//二维字符数组初始化
	char name[128]={0};//要输入的名字
	int i ,flag=0;//flag为标志量
	for (i=0;i<count;i++)
		gets(str[i]);//依次输入班级所有同学名字
	gets(name);// 输入要查找的名字
	for (i=0;i<count;i++)
		if (strcmp(str[i],name)==0)//字符串比较
		{flag=1;
		break;//若两个字符串相等,跳出循环
		}
	if (flag==1) //根据标志量判断
		printf("%s
",name);
	else
		printf("无此人
");
	return 0;
}

使用字符串处理函数
1.puts函数——输出字符串的函数
下面编写一个简单的程序:

#include <stdio.h>
int main (void)
{
	char str[128]={"helloword"};
	puts(str);//用puts函数输出字符串"helloworld"
	return 0;
}

运行结果如下:
在这里插入图片描述
用printf()函数输出:

#include <stdio.h>
int main (void)
{
	char str[128]={"helloword"};
	printf("%s",str);
	return 0;
}

运行结果如下:
在这里插入图片描述

用puts函数在输出时,将字符串结束标志’’转换成’ ’,即输出完字符串后换行。
相当于printf(“helloword ”)

即:

#include <stdio.h>
int main (void)
{
	char str[128]={"helloword"};
	printf("%s
",str);
	return 0;
}

在这里插入图片描述
由于可以用printf()函数输出字符串,因此puts函数用得不多。
2.gets函数——输入字符串的函数
gets函数的作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。

char str[128]={0};
gets(str);

从键盘输入:

computer

gets函数将从键盘读入的“computer”送入字符数组中。
3.strcat——字符串连接函数
其作用是把两个字符数组中的字符串连接起来,把字符串2接到字符串1的后面,结果放在字符数组1中。
说明:
字符数组1必须足够大,以便容纳连接后的字符串。
连接前两个字符串的后面都有’’,连接时将字符串1后面的‘’取消,只在新字符串最后面保留’’。
4.strcpy——字符串复制函数
5.strcmp——字符串比较函数
其作用是比较字符串1和字符串2。
字符串比较的原则是,将两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或者‘’为止。
如全部字符相同,则认为两个字符串相等;
若·出现不相同的字符,则以第一对不相同的字符的比较结果为准。



不断持续补充……

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。