现在的位置: 首页 > 综合 > 正文

C++中的字符串基础知识

2013年09月26日 ⁄ 综合 ⁄ 共 1022字 ⁄ 字号 评论关闭

C++中的字符串有两种,第一种称为C-Style string,来自C语言,另一种基于string类库的方法。

C-风格的字符串是以一个'\0'结尾的char数组,所以声明一个C-风格的字符串数组可以这样写:

1 char charry[5] = {'c','a','t','s','\0'};

或者用两外两种更简便的方法来声明:

1 char charry[10] = "cats";    // '\0'自动添加
2 
3 char charry[] = "cats"    //让编译器计算长度

C-风格的字符串输入和输出方法

char name[20];
cin >> name;
cout << name;

上面的字符串输入存在一个问题:cin对象使用空白(空格、制表符、换行符)来确定字符串的界,因此,上面的字符串输入方法不能输入包含空白的字符串。

较好的方法是使用cin的两个面向行输入的成员函数getline()和get()。这两个函数都读取一行输入,直到达到换行符,随后getline()将丢弃换行符,但是get()将换行符保留在输入序列中。

因此上面的代码可以这样写:

char name[20];
cin.getline(name, 20);

或者

char name[20];
cin.get(name, 20);

使用get()成员函数要注意,由于它保留换行符在输入队列中,所以后面使用cin进行读入时,读取的第一个字符就是换行符,如果不借助帮助,直接在后面使用get()函数将不能跨过该换行符,解决的方法是使用不带任何参数的cin.get()来读取下一个字符(即使是换行符)。

char name[20];
cin.get(name, 20).get();

cin.get()返回一个cin对象,因此可以像上面那样直接在后面调用get()函数。get函数还有很多重载形式,以后的文章中再讨论一下,接下来看看string类的一些基本IO内容。

先看看一小段对比C-风格字符转和string类字符转的输入和输出:

char charr[20];
string str;
cin.getline(charr, 20);
getline(cin, str);
cout << charr << endl;
cout << str << endl;

上面的代码中,处理C-风格的字符串使用的是istream的类方法,另一个不是(没有使用句点),这是因为istream的设计中没有处理string对象的类方法,getline(cin, str)使用的是string类的一个友元函数。

抱歉!评论已关闭.