C++的string类IO输入

原创 2017年01月03日 21:21:18

使用cin<<  可以将输入存储到string对象中,但当读取的字符串不是一个单词而是一行多个单词时(之间有空格),就需要getline方法

// strtype4.cpp -- line input
#include <iostream>
#include <string>               // make string class available
#include <cstring>              // C-style string library
int main()
{
    using namespace std;
    char charr[20]; 
    string str;

    cout << "Length of string in charr before input: " 
         << strlen(charr) << endl;
    cout << "Length of string in str before input: "
         << str.size() << endl;
    cout << "Enter a line of text:\n";
    cin.getline(charr, 20);     // indicate maximum length
    cout << "You entered: " << charr << endl;
    cout << "Enter another line of text:\n";
    getline(cin, str);          // cin now an argument; no length specifier
	//cin.getline(str, 20);     // indicate maximum length
    cout << "You entered: " << str << endl;
    cout << "Length of string in charr after input: " 
         << strlen(charr) << endl;
    cout << "Length of string in str after input: "
         << str.size() << endl;

     cin.get();

    return 0; 
}


运行结果:
Length of string in charr before input: 31
Length of string in str before input: 0
Enter a line of text:
123 56
You entered: 123 56
Enter another line of text:
567 657
You entered: 567 657
Length of string in charr after input: 6
Length of string in str after input: 7


在用户输入之前,程序运行结果charr字符串长度为31,这比数组长度都大!这主要由于两点:首先,数组未初始化。其次srelen()函数从数组第一个元素进行计算,直到遇到空字符。因为代码中未初始化数据,所以第一个空字符出现位置不定,因此,运行程序时,出现的数组长度不一定。

str中的字符串未初始化时,自动为0。

    cin.getline(charr, 20);     // indicate maximum length
此处的getline()是istream类的一个方法,第一个参数是目标数组,第二个是参数数组长度。

    getline(cin, str);          // cin now an argument; no length specifier
这个getline()不是类方法,它将cin作为参数,指出到哪里查找输入,同时并没有指定字符串长度的参数,这是因为string对象根据字符串长度自己调节大小。


为什么string类没有getline()这种类方法呢?在引入string类之前,C++就有istream类。所以istream类设计时考虑了double,int等C++基本类型,但没有考虑string,没有string类的类方法。



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++里string类字符串输入的用法(不断补充)

 学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行) 1、cin ...

黑马程序员——java基础——String类和IO

String类和IO流,信息量比较大,得慢慢消化。

C++string类设计

C++自编String类代码

【C++ Primer】【学习笔记】【第八章】标准IO库之:文件的输入和输出

一、文件流对象的使用 1、fstream头文件定义了三种文件IO的类型: 类型 说明 ifstream 从istream派生而来,提供...

c++ 的简单string 类

C++中string类的基本用法

C++IO流-标准输入与输出

一、I/O类关系在C++不直接处理输入输出,而是通过标准库中的I/O流类来进行处理。标准库主要有下面一些类:istream,ostream,iostream,ifstream,ofstream,fst...
  • ahafg
  • ahafg
  • 2017-02-27 21:34
  • 277

c++string类的实现

  • 2014-11-23 12:01
  • 416KB
  • 下载

c++string类详细介绍

  • 2011-07-28 00:00
  • 1.31MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)