C++基础复习:C++处理字符串的方法——字符串类与字符串变量

前言

C++提供了一种新的数据类型——字符串类型(string类型)。string类型并不是C++语言本身具有的基本类型,它是在C++标准库中声明的一个字符串类,用这种类型可以定义对象。

字符串变量的定义和引用

  1. 定义字符串变量
string str1;
string str2=“China”;

注意:在使用string类的定义变量时,必须在本文件的开头将C++标准库中的string头文件包含进来,即要加上#include <string>

  1. 对字符串变量赋值
str1=“China”;		//str1是字符串变量,不是字符数组名
str1=str2;		//字符串变量之间也可互相赋值
str1[2]='Z'	//可以对字符串变量中的某一个字符进行赋值,结果就成了“ChZna”
  1. 字符串变量的输入输出
cin>>str1;		//将str1输入
cout<<str1;		//将str1输出

字符串变量的运算

在用字符数组存放字符串时,字符串的运算要用字符串函数,如strcat连接、strcmp比较、strcpy复制。而对于string类对象,可以不用这些函数,而直接用简单的运算符。

  1. 字符串复制直接用符号
str1=str2;
作用同“strcpy(str1,str2);
  1. 字符串连接直接用+号
string str1="A";;
string str1="B";
string str;
str=str1+str2;		//则str="AB"
  1. 字符串比较直接用关系运算符
    可直接用关系运算符来进行字符串的比较。比如等于(==),大于(>),大于等于(>=),不等于(!=)。

字符串数组

不仅可以用string定义字符串变量,还可以用string定义字符串数组。

string name[5];
string name[5]={
    
    "W","A","N"};		//那每一个元素就相当于一个字符串变量。

字符串运算举例

  1. 输入三个字符串,要求将字符串按照字母的大小由小到大的顺序输出字符串,字符串之间用空格隔开。

题目分析:
首先肯定是先定义变量;
然后给变量赋值;
接着就是比较的过程:先对23进行比较,保证2是小于3的,然后就用1去和23比较,确定输出的字符串顺序,这样就容易许多。输出一直是123的顺序只不过已经是排序过的字符串了。

代码:

//输入三个字符串,要求将字符串按照**首**字母的大小由小到大的顺序输出字符串,字符串之间用空格隔开。
#include <iostream>
#include <string>
using namespace std;

int main()
{
    
    
	string str1,str2,str3,temp;
	cin >> str1 >> str2 >> str3;
	if(str2>str3)
	{
    
    
		temp=str2;str2=str3;str3=temp; //先保证str2是小于str3的然后再判断str1与这俩的大小
	}
	if(str1<=str2)
	cout << str1+' ' << str2+' ' <<str3;
else if(str1<=str3)
	cout << str2+' ' << str1+' ' << str3;
else
	cout << str2+' ' << str3+' ' << str1;

	return 0;
}

测试结果:
在这里插入图片描述

  1. 一个班有n个学生,需要把每个学生的简单材料(姓名和学号)输入计算机保存。然后可以通过输入某一学生的姓名查找其有关资料。当输入一个姓名之后,程序就查找该班中有无此学生,如果有,则输出他的姓名和学号,如果查不到,则输出“本班无此人”。
    为解决此问题,可分别编写两个函数,函数input_data用来输入n个学生的姓名和学号,函数search用来查找要找的学生是否在本班。

问题分析:
该问题的程序中除了主函数外,包括了两个子函数来供调用。

代码:

#include <iostream>
#include <string>
using namespace std;
//定义全局变量
string name[50],num[50];
int n;//实际的学生数

int main()
{
    
    	
	//函数声明
	void input_data();
	void search(string find_name);
	string find_name;
	//输入学生人数和信息
	cout <<"请输入本班学生的人数:";
	cin >> n;
	input_data();
	//查询
	cout << "请输入要查询的学生姓名:";
	cin >> find_name;
	search(find_name);

	return 0;
}

void input_data()
{
    
    
	int i;
	for(i=0;i<n;i++)
	{
    
    
		cout<<"请输入第"<< i+1 <<"个学生的姓名和学号:";
		cin >> name[i] >> num[i];
	}
}

void search(string find_name)
{
    
    
	int i;
	bool flag = false;//用来判断数据是否有效
	for(i=0;i<n;i++)
	{
    
    
		if(name[i] == find_name)//遍历之前输入的学生信息,若没有找到相关的学生信息则flag一直保持false。
		{
    
    	cout << name[i] << "的学号是:" << num[i] << endl;
			flag = true;			
		}
		break;//跳出本次循环,继续下一次循环
	}

	if(flag == false)
		cout << "本班无此人";
}

拓展:

#include <iostream>
#include <string>
using namespace std;
//定义全局变量
string name[50],num[50],sex[50],age[50],chinese[50],math[50],english[50];
int n;//实际的学生数

int main()
{
    
    	
	//函数声明
	void input_data();
	void search(string find_name);
	string find_name;
	//输入学生人数和信息
	cout <<"请输入本班学生的人数:";
	cin >> n;
	input_data();
	//查询
	cout << "请输入要查询的学生姓名:";
	cin >> find_name;
	search(find_name);

	return 0;
}

void input_data()
{
    
    
	int i;
	for(i=0;i<n;i++)
	{
    
    
		cout<<"请输入第"<< i+1 <<"个学生的姓名、学号、性别、年龄、以及语数英三门成绩:"<< endl;
		cout<<"姓名 ";cin >> name[i];
		cout<<"学号 ";cin >> num[i];
		cout<<"性别 ";cin >> sex[i];
		cout<<"年龄 ";cin >> age[i];
		cout<<"语文成绩 ";cin >> chinese[i];
		cout<<"数学成绩 ";cin >> math[i];
		cout<<"英语成绩 ";cin >> english[i];
	}
}

void search(string find_name)
{
    
    
	int i;
	bool flag = false;//用来判断数据是否有效
	for(i=0;i<n;i++)
	{
    
    
		if(name[i] == find_name)//遍历之前输入的学生信息,若没有找到相关的学生信息则flag一直保持false。
		{
    
    	cout << name[i] << "的学号是 " << num[i]<< "\t性别 " << sex[i] << "\t年龄 " << age[i]<< endl;
			cout << name[i] << "成绩分别为:\n" <<"语文成绩 "<< chinese[i]<<"\t数学成绩 "<< math[i] <<"\t英语成绩 "<< english[i]<< endl;
			flag = true;			
		}
		break;//跳出本次循环,继续下一次循环(去掉好像也可以)
	}

	if(flag == false)
		cout << "本班无此人";
}

结果测试:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43136158/article/details/105815464