C++基础总结(2)---字符串

     字符串是存储在内存的一系列字符。C++处理字符串有两种方式

           第一种来自C语言,即字符数组。

           第二种来是基于string类库的方法。

      C风格的字符串具有一种特殊的性质:以空字符结尾(空字符表示为''),其ASCII码值为0,用来标记字符产结尾。

     例如一下两个例子:

          char a[5]={'a','b','c','d',''};//a string 

          char b[5]={'a','b','c','d','e'};//not a string

     注意:在确定字符串存储所需的最短数组是,注意别忘了将结尾''计算在内。

      

char a[9];

cout<<sizeof(a);

其中sizeof(a)测试的是整个数组的长度,即9*sizeof(a[0]);


在使用cin输入字符串的时候,容易掉入一个小陷阱。比如下面一段程序:

#include <iostream>

using namespace std;

int main()
{
    const int arSize=20;
    char name[arSize];
    char dessert[arSize];

    cout<<"Enter your name:"<<endl;
    cin>>name;
    cout<<"Enter your favorite food"<<endl;
    cin>>dessert;
    cout<<"I have some delicious "<<dessert;
    cout<<" for you, "<<name<<endl;
    return 0;
}

下面是程序的运行截图



还没来得及输入甜点,就已经被认为输入结束。因为不能通过键盘输入空字符(''),因此cin使用别的方法(空格,制表符,换行符)来确定字符串结束的位置,这就意味着cin在获取字符串数组的时候之获取了前面的一个单词。而将空格后面的单词通过第二个cin。

解决方方法有两种面向行的输入。

第一种:调用cin.getline(arrayname,length);两个参数分别是字符数组的名称和要输入的长度。当按下enter之后最后的换行符将会被装空字符替换。

第二种:调用cin.get(arrayname,length),参数和前面的意思是一样的。区别在于get不在读取并且丢弃换行符。

cin.get(name,ArSize);

cin.get(dessert.ArSize);

由于第一次调用之后换行符留在了队列当中。当第二次调用的时候读取的是换行符,会认为该字符串已经输入结束。

正确的使用方法:

cin.get(name.ArSize);

cin.get(dessert,ArSize);

混合输入字符串和数字的时候

#include <iostream>

using namespace std;

int main()
{
    cout<<"What year is your hourse built?"<<endl;
    int year;
    cin>>year;
    cout<<"What is its street address?
";
    char address[80];
    cin.get();
    cin.getline(address,80);
    cout<<"Year built:"<<year<<endl;
    cout<<"Address"<<address<<endl;
    cout<<"Done"<<endl;
    return 0;
}
运行结果


原因和上面的一样,输入数字之后的换行符被getline读到了。解决办法,在getline前面加上一个cin,get()


string类和字符数字大体相似。但是string用起来更加安全和方便。其主要区别是课件string对象声明成简单变量而不是数组

string str;

string str2="panhter";

类的设计可让程序自动处理string'的大小。string的声明创建一个长度为0的string。当输入读到string时将自动调节string的长度.



   

    

原文地址:https://www.cnblogs.com/gaot/p/7709703.html