【C++程序设计】——利用数组处理批量数据(二)

在这里插入图片描述


👨‍💻个人主页@开发者-削好皮的Pineapple!

👨‍💻 hello 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 削好皮的Pineapple! 原创

👨‍💻 收录于专栏C++程序设计


请添加图片描述

请添加图片描述


⭐前言⭐

用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符。字符数组具有数组的共同属性。由于字符串应用广泛,C和C++专门为它提供了许多方便的用法和函数,因此有必要专门介绍字符串和字符数组。


🎶一、字符数组


(一)定义和初始化字符数组
定义字符数组初始化和前面介绍的方法类似,以下再例举一些例子。

//第一种赋值方式 
char c[10];
c[0]='I';c[1]=' '; c[2]='a';c[3]='m'; c[4]='j';c[5]=' '; c[6]='l';c[7]=' '; c[8]='h';c[9]='x'; 
//第二种赋值方式 
c[10]={'I',' ','a','m','j',' ','l',' ',' ','h','x'}; 
//第三种赋值方式 
c[]={'I',' ','a','m','j',' ','l',' ',' ','h','x'}; 

(二)字符数组的赋值与引用
需要注意的是:只能对字符数组的元素赋值,而不能用赋值语句对整个数组赋值
举例说明:

char c[5];
c=['C','h','i','n','a'];//错误
c[0]='C';c[1]='h';c[2]='i';c[3]='n';c[4]='a';//正确

🌰:设计和输出一个钻石图形。

#include<iostream>
using namespace std;
int main()
{
	char diamond[5][5]={{' ',' ','*',' ',' '},{' ','*',' ','*',' '},
	{'*',' ',' ',' ','*'},{' ','*',' ','*',' '},{' ',' ','*',' ',' '}};
	int i,j;
	for(i=0;i<5;i++)
	{
		for(j=0;j<5;j++)
		cout<<diamond[i][j];
		cout<<endl;
	}
	return 0;
	
}

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

(三)字符串和字符串结束标志
C++规定了一个“字符串结束标志符”,以字符‘\0’代表。遇到字符‘\0’就表示字符串到此结束,由它前面的字符串组成有效字符串
在程序中往往依靠检测‘\0’的位置来预判字符串是否结束,而不是根据数组的长度来决定字符串的长度。
我们可以用字无创产量来初始化字符数组,例如:

char str[12]={'I',' ','a','m',' ','h','a','p','p','y',};//可以写成
char str[]={"I am happy"}; 
char str[]="I am happy";

⚠️注意:数组str的长度不是十而是11因为字符串产量的最后由系统加上了一个‘/0’。
(四)字符数组的输入输出
1.字符数组的输入输出字符数组的输入输出可以有两种方法:

  • (1)逐个字符输入输出。如例5.9。
  • (2)将整个字符串一次输入或输出。例如有以下程序段:
char str[20];
cin >> str;
//用字符数组名输入字符串
cout << str;
//用字符数组名输出字符串

请注意:
(1)输出的字符不包括结束符’\0’。
(2)输出字符串时,cout流中用字符数组名,而不是数组元素名。如

cout << str;//用字符数组名,输出一个字符串
cout <<str[4];//用数组元素名,输出一个字符

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

char str[10]="China";
cout << str;

只输出”China”5个字符,而不是输出10个字符。这就是用字符串结束标志的好处。
(4)如果一个字符数组中包含一个以上’\0’,则遇第1个’\0’时输出就结束。
(5)用cin从键盘向计算机输入一个字符串时,从键盘输入的字符串应短于已定义的字符数组的长度。
(五)使用字符串处理函数对字符串进行操作
1.字符串连接函数strcat (string catenate)
**strcat(char[],const char[])**它的作用是将第二个字符数组中的字符串复制到第一个字符数组中去,将第一个字符数组中的相应字符覆盖。
例如:

char str1[10]="I am";
char str2[]="beautiful girl!"
cout<<strcat(str1,str2);

2.字符串复制函数strcpy (string copy)
strcpy(char[],const char[])

char str1[10],str2[]="China";
strcmp(str1,str2);

执行后,str2中的五个字符"China"和’/0’共六个字符复制到数组str1中。
⚠️注意:
(1)在调用strcpy 函数时,第1个实参必须是数组名(如stl),第2个实参可以是字
符数组名,也可以是一个字符串常量。如:
strcpy(strl,"China");
(2)可以用strcpy函数将一个字符串中前若干个字符复制到一个字符数组中去。例如:
strcpy(strl,str2,2);
作用是将 str2中前面2个字符复制到str1中去,然后再加一个’\0’。
(3)只能通过调用strcpy函数来实现将一个字符串赋给一个字符数组,而不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。如下面是不合法的:

str1="China";//不能将一个字符串常量赋给一个字符数组
str1 =str2;//不能将一个字符数组的内容赋给另一个字符数组

str1代表数组地址,是常量,不能被赋值,不能作左值。

3.字符串比较函数strcmp (string compare)
strcmp(char[],const char[])
(1)如果字符串1等于字符串2,函数值为0。
(2)如果字符串1大于字符串2,函数值为一正整数。
(3)如果字符串1小于字符串2,函数值为一负整数。
4.字符串长度函数strlen(string length)
strclen(char[],const char[])
(六)字符数组应用
🌰:有3个国家名,要求找出按照字母顺序排在最前面的国家。要求用函数调用。

#include<iostream>
#include<cstring>
using namespace std;
void smallest_string(char str[][30], int i); //函数声明
int main() {

	int i;
	char country_name[3][30];//定义二维数组
	for (i = 0; i < 3; i++) {
		cin >> country_name[i];

	}
	smallest_string(country_name, 3); //调用函数(在循环外被调用一次)
	//在循环内部调用 smallest_string 函数并不合适,因为这样会导致每输入一个国家名称就会输出一次结果
	return 0;
}
void smallest_string(char str[][30], int n) {
	int i;
	char string[30];
	strcpy(string, str[0]); //使得string的值为str[0]的值
	for (i = 0; i < n; i++)
		if (strcmp(str[i], string) < 0) //如果str[i]<string
			strcpy(string, str[i]); //将str[i]中的字符串复制到string,更新最小字符串
	cout << endl << "最小的字符串是:" << string << endl;
}

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


🎶二、字符串类与字符变量

C++提供了一种新的数据类型——字符串类型(string类型)。
(一)字符串变量的定义和引用
1.定义字符串变量

string string1;//定义string1为字符串变量
string string2="China";//定义string2为字符串变量并初始化

使用string类定义变量时应包含头文件#include<string>
2.对字符串变量的赋值
在定义了字符串变量后,可以用赋值语句对它赋予一个字符串常量,如
string1="China";
注意:string1是字符串变量,不是字符数组名,用字符数组时是不能这样做的,如:

char str[10];//定义字符数组 str
str="Canada";//错误,str不是字符串变量而是参数组名

既可以用字符串常量给字符串变量赋值,也可以用一个字符串变量给另一个字符串变量赋值。如
string2 =string1;//假设 string2和string1均已定义为字符串变量
不要求string2和string1长度相同,假如string2原来是“China",string1原来是”Canada",赋值后 string2也变成”Canada"。
在定义字符串变量时不需指定长度,它的长度随其中的字符串长度而改变。如在执行上面的赋值语句前,string1的长度为5,赋值后长度为6。
这就使我们在向字符串变量赋值时不必精确计算字符个数,不必顾虑是否会“超长”而影响系统安全,为使用者提供很大方便。
可以对字符串变量中某一字符进行操作,如

string word ="Then";//定义并初始化字符串变量 word
word[2]='a';//修改序号为2的字符,修改后 word 的值为"Than"

3.字符串变量的输入和输出

cin>>string1;
cout<<string2;
//举例都是前面有定义的情况

(二)字符串变量的运算
1.字符串赋值直接用赋值号
string1=string2
2.字符串连接用加号

string string1="C++:";
string string2="Language";
string1=string1+string2;

string1的结果为:C++ Language
3.字符串比较直接用关系运算符
==、>、<、!=、>=、<=等关系运算符比较。
(三)字符串数组
不仅可以用string定义字符串变量,也可以用string定义字符串数组。

string name[5];//定义一个字符串数组,包含5个字符串元素
string name[5]={"Haaa","Hou","Xiang","Mei","Nv"};//赋值

(四)字符串运用
🌰:输入3个字符串,要求将字母按照由大到小的顺序输出。

#include<iostream>
#include<string>
using namespace std;
int main() {
	string string1, string2, string3, temp;
	cout << "请输入三个字符串:" << endl;
	cin >> string1 >> string2 >> string3;
	if (string2 > string3) {
		temp = string2;
		string2 = string3;
		string3 = temp;
		//2<3
	}
	if (string1 <= string2)
		cout << string1 << " " << string2 << " " << string3 << endl; //1<2,1<2<3
	else	if (string1 <= string3)
		cout << string2 << " " << string1 << " " << string3 << endl; //1>2,1<3,2<1<3
	else cout << string2 << " " << string3 << " " << string1 << endl; //1>2,1>3,2<3<1
	return 0;
}

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


请添加图片描述

结束语🥇

以上就是C++程序设计
持续更新C++程序设计教程,欢迎大家订阅系列专栏🔥C++程序设计你们的支持!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值