4-数组、指针与字符串1.6-字符串
在c语言中是使用字符型数组来存放字符串,c++程序中也仍然可以沿用这种方法;不仅如此,标准c++库中还预定义了string类。
1、用字符数组存储和处理字符串
a、字符数组的声明和引用
eg:
#include<iostream>
using namespace std;
int main()
{
static char c[10]={'I',' ','A','M','A','B','O','Y'};
int i;
for(i=0;i<10;i++)
cout<<c[i];
cout<<endl;
}
b、用字符数组存放字符串
eg:static char str[8]="program";
static char str[]="program";
如果用字符数组来存放字符串,即可以逐个字符输入输出,也可以将整个字符串一次输入或输出。例如:
char c[]="China";
cout<<c;
字符串整体输入/输出时,要注意:
1)输出字符不包括'\0';
2)输出字符串时,输出项是字符数组名,输出时遇到'\0'结束;
3)输入多个字符串时,以空格分隔;输入单个字符串时其中不能有空格。
eg:
static char str1[5],str2[5],str3[5];
cin>>str1>>str2>>str3;
如果运行时输入如下数据:How are you?
str1:How\0
str2:are\0
str3:you?\0
static char str[13];
cin>>str;
运行时输入数据:
How are you?
内存中变量str内容如下:str:How\0;这是因为输入时遇到空格便停止,所以只接收到了第一个单词。
对字符串进行处理,可以使用系统的字符串处理函数strcat(连接)、strcpy(复制)、strcmp(比较)、strlen(求长度)、strlwr(转换为小写)、strupr(转换为大写)。其头文件是cstring。
2、string类
由于将数据与处理数据的函数分离不符合面向对象方法的要求。为此,c++标准类库将面向对象的串的概念加入到c++语言中,预定义了字符串类(string 类),string类提供了对字符串进行处理所需要的操作。其头文件为string;string类封装了串的属性并提供了一系列允许访问这些属性的服务,属性或类的数据组件包括:
字符序列、字符序列的大小或长度、序列中字符的类型、字符的特点、一个字符的大小、分配算符、迭代子(iterators)
串类也描述了很多有关串操作的服务,包括:
查找、分配、连接、追加
1)构造函数的原型
string();//默认构造函数,建立一个长度为0的串
string(const string &rhs);//拷贝初始化构造函数
string(const char *s);//用指针s所指向的字符串初始化string类的对象
string(const string& rhs,unsigned int pos,unsigned int n);//将对象rhs中的串从位置pos开始取n个字符,用来初始化string类的对象
string(const char *s,unsigned int n);//用指针s所指向的字符串中的前n个字符初始化string类的对象
string(unsigned int n,char c);//将参数c中的字符重复n次,用来初始化string类的对象。
2)常用成员函数功能简介
在下面的函数说明中,将成员函数所属的对象称为“本对象”,其中存放的字符串称为“本字符串”;
string append(const char *s);//将字符串s添加在本串尾
string assign(const char *s);//赋值,将s所指向的字符串赋值给本对象
int compare(const string & str) const;//比较本串与str中串的大小,当本串<str串时,返回负数,当本串>str串时,返回正数,两串相等时,返回0.
string& insert(unsigned int p0,const char *s);//将s所指向的字符串插入在本串中位置p0之前
string substr(unsigned int pos,unsigned int n)const;//取子串,取本串中位置pos开始的n个字符,构成新的string类对象作为返回值
unsigned int find(const basic_string& str)const;//查找并返回str在本串中第一次出现的位置
unsigned int length() const;//返回串的长度(字符个数)
void swap(string &str);//将本串与str中的字符串进行交换
3)string类的操作符
操作符 实例 注释
+ s+t 将串s和t连接成一个新串
= s=t 用t更新s
+= s+=t 等价于s=s+t;
==(测试等于)、!=(不等于)、<(字符串小于)、<=(字符串小于等于)、>(字符串大于)、>=(字符串大于等于)、[i](访问串中下标为i的字符)
举例:
#include<string>
#include<iostream>
using namespace std;
void trueFalse(int x)
{
cout<<(x?"TRUE":"FALSE")<<endl;
}
int main()
{
string S1="DEF",S2="123";
char CP1[]="ABC";
char CP2[]="DEF";
cout<<"S1 is"<<S1<<endl;
cout<<"S2 is"<<S2<<endl;
cout<<"length of S2:"<<S2.length()<<endl;
cout<<"CP1 is"<<CP1<<endl;
cout<<"CP2 is"<<CP2<<endl;
cout<<"S1<=CP1 returned";
trueFalse(S1<=CP1);
cout<<"CP2<=S1 returned";
trueFalse(CP2<=S1);
S2+=S1;
cout<<"S2=S2+S1:"<<S2<<endl;
cout<<"length of S2:"<<S2.length()<<endl;
getchar();
}