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)输出字符不包括'';

2)输出字符串时,输出项是字符数组名,输出时遇到''结束;

3)输入多个字符串时,以空格分隔;输入单个字符串时其中不能有空格。

eg:

static char str1[5],str2[5],str3[5];

cin>>str1>>str2>>str3;

如果运行时输入如下数据:How are you?

str1:How

str2:are

str3:you?

static char str[13];

cin>>str;

运行时输入数据:

How are you?

内存中变量str内容如下:str:How;这是因为输入时遇到空格便停止,所以只接收到了第一个单词。

对字符串进行处理,可以使用系统的字符串处理函数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();
}

原文地址:https://www.cnblogs.com/gary-guo/p/6231274.html