任务描述
本关任务:从后台输入任意三个字符串,求最大的字符串。
相关知识
字符串本身是存放在一块连续的内存空间中,并以’\0’作为字符串的结束标记。
字符指针变量本身是一个变量,用于存放字符串的第 1 个字符的地址。
字符数组是由若干个数组元素组成的,它可用来存放字符串的所有字符。
字符串类型的数据不能像数值型数据一样进行加减乘除等运算。常见的字符串类型数据的运算有求字符串的长度、字符串的复制、比较两个字符串的大小、字符串的连接等。
字符串的运算比数值型数据的运算复杂,为减轻编程的负担,提高效率,C 语言提供了丰富的字符串处理函数来实现字符串的运算,对字符串进行整体操作。
使用字符串处理函数应包含头文件"string.h",几种常见运算有:
求字符串长度函数:strlen( )
字符串拷贝函数:strcpy( )
字符串连接函数:strcat( )
字符串比较函数:strcmp( )
求一个字符串的长度
字符串的长度是字符串中所包含的字符个数。例如:"CHINA"的长度是 5,"C program"的长度是 9。
#include<stdio.h>
#include<string.h>
int main()
{
char str[20];
printf(“input string:\n”);
gets(str);
printf(“output string:\n”);
puts(str);
printf(“数组大小=%d\n”,sizeof(str));
printf(“字符串长度=%d\n”,strlen(str));
return 0;
}
运行结果:
input string:
Hubei Huangshi
output string:
Hubei Huangshi
数组大小=20
字符串长度=14
注意区分字符数组的长度和字符串的长度,长度为20的字符数组可以存放长度小于等于19的字符串。
字符串的拷贝
对字符数组只能在定义的同时初始化,不能先定义字符数组,再使用赋值语句为一个字符数组赋值。
char s[15];
s = “C Program”; //编译错误
要将字符串"C Program"存入到数组s中,可以通过调用字符串拷贝函数strcpy()函数来实现。请看示例,从键盘输入两个字符串,交换后输出这两个字符串的值。
#include<stdio.h>
#include<string.h>
int main()
{
char st1[15],st2[15],t[15];
printf(“Please input 2 string:\n”);
gets(st1);
gets(st2);
strcpy(t, st1); //把字符数组st1中的字符串拷贝到t中,串结束标志’\0’也一同拷贝
strcpy(st1,st2); //把字符数组st2中的字符串拷贝到st1
strcpy(st2,t); //把字符数组t中的字符串拷贝到st2
printf(“Now string is:\n”);
puts(st1);
puts(st2);
return 0;
}
运行结果:
Please input 2 string:
Hubei Huangshi
Hubei Wuhan
Now string is:
Hubei Wuhan
Hubei Huangshi
字符串的连接
字符串这种类型的数据经常需要将两个字符串连接起来,把一个字符串接到另一个字符串的后面,得到一个新字符串。例如:将"Hubei"和"Huangshi"连接,可以得到"HubeiHuangshi"这个新字符串。
请看示例,从键盘输入自己的籍贯和名字,试将它们连接在一起成为一个字符串。
#include<stdio.h>
#include<string.h>
int main( )
{
char str1[30],str2[10];
printf(“Please input 2 string:\n”);
gets(str1);
gets(str2);
strcat(str1,str2);// 把str2中的字符串连接到str1中字符串的后面,新串最后加’\0’
printf(“%s\n”,str1);
return 0;
}
运行结果:
Please input 2 string:
Hubei Huangshi
Zhang San
Hubei HuangshiZhang San
说明:str1必须足够大,否则不能全部装入被连接的字符串。
比较两个字符串的大小
字符串在计算机中是可以比较大小的,字符串比较的规则:就是将两个字符串自左至右逐个比较对应位置上字符的ASCII码值,直到出现不同的字符或者达到某个字符串的结尾为止,若全部字符相同,则认为两个字符串相等;若出现不相同的字符,则以第一对不相同的字符的比较结果为准。
例如: "AC"与"B"比较,因为A的ASCII码值比B小,那么后面的字符就不再比较了 ,字符串"AC"比字符串"B"小;"computer"与"Computer"比较,因为小写c的ASCII码值比大写C大,所以"computer "比"Computer " 大。
库函数strcmp(字符串1,字符串2)的功能:按从左向右顺序逐个比较两串字符的ASCII码,直到遇到不同字符或’\0’为止,函数返回值为int型整数,规则如下:
若字符串1==字符串2,返回零;
若字符串1>字符串2,返回正整数;
若字符串1<字符串2,返回负整数。
注意:对两个字符串比较,不能用以下形式:
if( str1==str2) printf(“yes”);
而只能用以下语句:
if( strcmp(str1, str2) == 0) printf(“yes”);
编程要求
根据提示,在右侧编辑器 Begin-End 区间补充代码,从后台获取任意三个字符串,输出最大的字符串。
提示:“从键盘输入三个字符串,求最大的字符串”与“从键盘输入三个整数,求最大的整数”两者算法思想是一致的,只是处理的数据对象不是整数,而是字符串。
测试说明
平台会对你编写的代码进行测试。
测试输入:
Huangshi
Xiangyang
Wuhan
预期输出:
Xiangyang
开始你的任务吧,祝你成功!
#include<stdio.h>
#include<string.h>
int main()
{ char st1[15],st2[15],st3[15],max[15];/*****输入3个字符串*****//********** Begin **********/gets(st1);gets(st2);gets(st3);/********** End **********//*****求3个字符串中的最大字符串*****//********** Begin **********/strcpy(max,st1);if(strcmp(max,st2)<0)strcpy(max,st2);if(strcmp(max,st3)<0)strcpy(max,st3);puts(max);/********** End **********/return 0;
}
非常简单。