C++字符串
字符串是存储在内存的连续字节中的一系列字符。C++处理字符串的方式有两种。第一种来自C语言,第二种是基于string类的方法。
1、C-style string
声明方式: char cat[8] = {'f','a','b','c','d','e','y','\0'}; //最后必须以'\0'结束
char chat[9] = "hello";
char mm[] = "hello_jason"; //中间不能有空格,空格会被编译器识别为:字符串结束。
在字符串的声明中,如果没有加'\0',那编译器会在最后自动加上一个'\0',以表示字符串的结束。
C++允许以下的字符串拼接处理:
#include<iostream>
int main()
{
using namespace std;
cout<<"hello "
"Jason!\n";
return 0;
}
看下面的代码,当输入时可能会出现的问题:
#include<iostream>
int main()
{
using namespace std;
const int Size = 20;
char name[Size];
char cat[Size];
cout<<"input your name:"<<endl;
cin>>name;
cout<<"input your cat'name:"<<endl;
cin>>cat;
cout<<name<<" likes "<<cat<<endl;
}
当你输入一个名字比如:Alistair Dreeb并按回车时,最终结果就会显示:Alistair likes Dreeb 显然这并不是你想要的结果,那为什么会出现这样的结果?原因是:输入的字符串中有个空格,而istream的cin对象遇到空格就会认为这个字符串已经结束,并将其存入name数组中。而空格后面的将被认为是第二次输入或者没有第二次输入将会被遗弃。从而本例中cat数组中存的是Dreeb,所以才有了最后让人不明所以的结果。
为此我们介绍cin对象中两个类成员函数getline()和get()。
面向行的输入:getline(),这个函数读取一整行,他通过回车键输入的换行符来确定输入结尾。该函数有两个参数,第一个参数是用来存储输入行的数组名,第二参数为读取的字符数。eg cin.getline(name,20);
get()函数,同样有两个参数,且与getline()的参数意义相同。唯一不同点是:get()并不读取并丢弃换行符。假如:cin.get(name,20);cin.get(name,20);这时第二条语句将不会接受任何值。除非使用以下语句:cin.get(name,20);cin.get():cin.get(name,20); 中间的cin.get()是为了读取下一个字符,在这块就是为了读取换行符。
另外也可用一下形式:cin.get(name,20).get() / cin.getline(name,20).getline(name1,20);整体代码如下:
#include<iostream>
int main()
{
using namespace std;
const int Size = 20;
char name[Size];
char cat[Size];
cin.get(name,20).get();
cin.get(cat,20);
cout<<name<<" likes "<<cat<<endl;
cin.get(); //注意,读取cin.get(cat,20)后面的那个换行符。
cin.getline(name,20).getline(cat,20);
cout<<name<<" likes "<<cat<<endl;
}
以上就是对C++字符串的简单介绍,而C++常常用指针(而不是数组)来处理字符串。等到以后再介绍。
浙公网安备 33010602011771号