前言
C++提供了一种新的数据类型——字符串类型(string类型)。string类型并不是C++语言本身具有的基本类型,它是在C++标准库中声明的一个字符串类,用这种类型可以定义对象。
字符串变量的定义和引用
- 定义字符串变量
string str1;
string str2=“China”;
注意:在使用string类的定义变量时,必须在本文件的开头将C++标准库中的string头文件包含进来,即要加上#include <string>
- 对字符串变量赋值
str1=“China”; //str1是字符串变量,不是字符数组名
str1=str2; //字符串变量之间也可互相赋值
str1[2]='Z' //可以对字符串变量中的某一个字符进行赋值,结果就成了“ChZna”
- 字符串变量的输入输出
cin>>str1; //将str1输入
cout<<str1; //将str1输出
字符串变量的运算
在用字符数组存放字符串时,字符串的运算要用字符串函数,如strcat连接、strcmp比较、strcpy复制。而对于string类对象,可以不用这些函数,而直接用简单的运算符。
- 字符串复制直接用符号
str1=str2;
作用同“strcpy(str1,str2);”
- 字符串连接直接用+号
string str1="A";;
string str1="B";
string str;
str=str1+str2; //则str="AB"
- 字符串比较直接用关系运算符
可直接用关系运算符来进行字符串的比较。比如等于(==),大于(>),大于等于(>=),不等于(!=)。
字符串数组
不仅可以用string定义字符串变量,还可以用string定义字符串数组。
string name[5];
string name[5]={"W","A","N"}; //那每一个元素就相当于一个字符串变量。
字符串运算举例
- 输入三个字符串,要求将字符串按照首字母的大小由小到大的顺序输出字符串,字符串之间用空格隔开。
题目分析:
首先肯定是先定义变量;
然后给变量赋值;
接着就是比较的过程:先对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;
}
测试结果:
- 一个班有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 << "本班无此人";
}
结果测试: