C++基础学习

来源:互联网 发布:苹果电脑数据恢复软件 编辑:程序博客网 时间:2024/05/18 02:53
要一次读取一整行输入,需要使用C++的函数 getline,相对于是用cin,我们更建议使用getline来读取用户输入。
// 读取字符串例子#include <iostream>#include <string>using namespace std;int main (){  string mystr;  cout << "What's your name? ";  getline (cin, mystr);  cout << "Hello " << mystr << ".\n";  cout << "What is your favorite color? ";  getline (cin, mystr);  cout << "I like " << mystr << " too!\n";  return 0;}

字符串流 (stringstream)

标准头文件 <sstream> 定义了一个叫做 stringstream 的类,使用这个类可以对基于字符串的对象进行像流(stream)一样的操作。这样,我们可以对字符串进行抽取和插入操作,这对将字符串与数值互相转换非常有用。例如,如果我们想将一个字符串转换为一个整数,可以这样写:

string mystr ("1204");int myint;stringstream(mystr) >> myint;

数组赋值的常用方法是直接使用输入流(cin)。在这种情况下,字符序列的值是在程序运行时由用户输入的。

当cin 被用来输入字符序列值时,它通常与函数getline 一起使用,方法如下:

cin.getline ( char buffer[], int length, char delimiter = ' \n');

这里buffer 是用来存储输入的地址(例如一个数组名),length 是一个缓存buffer 的最大容量,而delimiter 是用来判断用户输入结束的字符,它的默认值(如果我们不写这个参数时)是换行符newline character ('\n')。

/ cin with strings
#include <iostream.h>

int main () {
char mybuffer [100];
cout << "What's your name? ";
cin.getline (mybuffer,100);
cout << "Hello " << mybuffer << ".\n";
cout << "Which is your favourite team? ";
cin.getline (mybuffer,100);
cout << "I like " << mybuffer << " too.\n";
return 0;
}
cin >> mybuffer;

这种方法也可以工作,但它有以下局限性是cin.getline所没有的:

  • 它只能接收单独的词(而不能是完整的句子),因为这种方法以任何空白符为分隔符,包括空格spaces,跳跃符tabulators,换行符newlines和回车符arriage returns。
  • 它不能给buffer指定容量,这使得程序不稳定,如果用户输入超出数组长度,输入信息会被丢失。

因此,建议在需要用cin来输入字符串时,使用cin.getline来代替cin >>。

0 0
原创粉丝点击