简单总结下C++字符串读取函数的使用.

由于有一些微小的差异不容易记忆,在这里整理下目前看到的C++的字符串读取函数

面向单词的读取

std::cin直接读取,正如前面总结的cin会跳过空字符。

面向行的读取

  1. cin.getline()
    通过换行符确定输入结尾,读取不保存换行符(用空字符代替换行符),调用举例

    1
    2
    char name[20];
    std::cin.getline(name, 20); // 包含字符不超过19个
  2. cin.get()
    调用方式和确定结尾方式均与cin.getline()相同,但是不读取换行符,换行符仍保留在流中,因此若要连续读入行要使用变体cin.get()将换行符跳过,例如:

    1
    2
    3
    std::cin.get(name, 20);
    std::cin.get();
    std::cin.get(name, 20);

    由于返回对象仍是cin,因此可连续调用

    1
    cin.get(name, 20).get();

    注意:

    std::cin.get()函数读取到空行时会返回false,但是在较早的C++标准中的std::cin.get()版本读取空行后并不会返回false,而是将字符串中的第一个字符设为空字符'\0'
  3. getline()
    对于string对象的读取,使用的是getline()函数,例如:

    1
    2
    std::string str;
    getline(std::cin, str);

    若读取失败,返回false

  4. cin.ignore()
    该函数接受两个参数,一个实数字,制定要读取的最大字符数;另一个是字符用作输入分界符。例如下面的函数调用读取斌丢弃接下来的255个字符或者知道达到第一个换行符:

    1
    cin.ignore(255, '\n');

    函数原型:

    1
    istream & ignore(int = 1, int = EOF);


cin.getline() VS cin.get()

cin.get()可以通过判断下一个字符是否是换符\n来判断是否是读取整行而停止还是数组填满
cin.getline()由于吞掉了\n则无法判断

Comments

2016-01-24