关闭

C++的string类IO输入

标签: string
187人阅读 评论(1) 收藏 举报
分类:

使用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类的类方法。



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:80810次
    • 积分:2163
    • 等级:
    • 排名:第17598名
    • 原创:140篇
    • 转载:8篇
    • 译文:0篇
    • 评论:6条
    最新评论