注册 登录
编程论坛 C++教室

关于字符串任意输入并且识别空格的问题

linw1225 发布于 2011-05-11 12:48, 3002 次点击
#include<iostream>
#include<string>
using namespace std;

class Person
{
    private:
        string num;   //编号
        string name;  //姓名
    public:
        Person();
        ~Person()
        {}
        void Person::enter();
        void print();
};

Person::Person()
{
    num='\0';
    name='\0';
}

void Person::enter()   //Person类数据信息的输入
{
    cout<<"输入编号:";
    cin>>num;

    cout<<"输入姓名:";
    cin>>name;
}

void Person::print()  //Person类数据信息的输出
{
    cout<<"编号:"<<num<<endl;
    cout<<"姓名:"<<name<<endl;
}



class Teacher:public Person  
{
    private:
        string zhichen; //职称
        string bumen;   //部门
    public:
        Teacher():Person()
        {
            zhichen='\0';
            bumen='\0';
        }
        ~Teacher()
        {}

        void enter()
        {
            Person::enter();
            cout<<"输入职称:";
            cin>>zhichen;
            cout<<"输入部门:";
            cin>>bumen;
        }

        void print()
        {
            Person::print();
            cout<<"职称:"<<zhichen<<endl;
            cout<<"部门:"<<bumen<<endl;
        }
};

int main()
{
        Teacher t1;
   
    cout<<"教师信息输入:"<<endl;
    t1.enter();
    cout<<"***************************************"<<endl;
    cout<<"教师信息显示:"<<endl;
    t1.print();

    return 0;
}
Teacher类中的职称和部门如果要输入空格怎么改?如输入职称中:gaoji jiaoshi
14 回复
#2
hellovfp2011-05-11 13:48
用getline函数。
#3
linw12252011-05-11 16:05
回复 2楼 hellovfp
能不能麻烦你在原代码的基础上改下?
#4
linw12252011-05-11 16:11
回复 2楼 hellovfp
如果用getline函数的话,形式是getline(cin,zhichen);吧?
这样的话可以实现输入,但是Teacher类中t1对象显示数据信息的时候职称一栏是空白的。
#5
linw12252011-05-11 16:20
回复 2楼 hellovfp
只有本站会员才能查看附件,请 登录
#6
linw12252011-05-11 16:20
回复 2楼 hellovfp
会出现如图中所显示的问题。
#7
hellovfp2011-05-11 17:34
程序代码:
#include<iostream>
#include<string>
using namespace std;

class Person
{
    private:
        string num;   //编号
        string name;  //姓名
    public:
        Person();
        ~Person()
        {}
        void Person::enter();
        void print();
};

Person::Person()
{
    num='\0';
    name='\0';
}

void Person::enter()   //Person类数据信息的输入
{
    cout<<"输入编号:";
    cin>>num;

    cout<<"输入姓名:";
    cin>>name;
}

void Person::print()  //Person类数据信息的输出
{
    cout<<"编号:"<<num<<endl;
    cout<<"姓名:"<<name<<endl;
}



class Teacher:public Person

{
    private:
        string zhichen; //职称
        string bumen;   //部门
    public:
        Teacher():Person()
        {
            zhichen='\0';
            bumen='\0';
        }
        ~Teacher()
        {}

        void enter()
        {
            char input[80];

            Person::enter();
            cin.sync();
            cin.clear();
            cout<<"输入职称:";
            cin.getline(input, 80);
            zhichen = input;
            cout<<"输入部门:";
            cin.getline(input, 80);
            bumen = input;
        }

        void print()
        {
            Person::print();
            cout<<"职称:"<<zhichen<<endl;
            cout<<"部门:"<<bumen<<endl;
        }
};

int main()
{
        Teacher t1;
  

    cout<<"教师信息输入:"<<endl;
    t1.enter();
    cout<<"***************************************"<<endl;
    cout<<"教师信息显示:"<<endl;
    t1.print();

    return 0;
}
#8
hellovfp2011-05-11 17:37
没事儿不要在构造函数里给string类变量附'\0'值.无意义。
string类变量在产生的时候就是空的。
#9
linw12252011-05-11 21:09
回复 7楼 hellovfp
好吧,还是定义数组,那如果输入的字符串长度大于 80呢?
#10
linw12252011-05-11 21:12
回复 7楼 hellovfp
就是能不能不规定字符数组长度的那种?
#11
hellovfp2011-05-12 13:40
回复 10楼 linw1225
这个getline函数据说好象是VC6的一个bug,不知道是不是真的,换个编译器写C++程序也许遇不上,你试试用codeblocks,也许程序不用改都可以,偶只是提供一个变通的方法达到你想要的目的,至于为什么是80个,是控制台程序一行可以显示80个字符,不过失去了string类使用的初衷,如果要输入任意个字符到string变量中,也许只有自己实现输入了,可以用vector来装字符,接收到一个字符压入vector,然后送到string变量中。个人使用C++输入输出流不多,仅个人见解,仅做参考。
#12
linw12252011-05-13 22:44
回复 7楼 hellovfp
试了还有一种可以输入空格的。
简单的小代码如下:
string a;
      getline(cin,a);

这样输入的字符串就可以包含空格了。
头文件要定义
#include<string>

但是,貌似在VC6.0里面要按两次eter键才能结束a的输入,接着输入另外的数据。
#13
linw12252011-05-14 05:38
回复 8楼 hellovfp
再次试了下,getline果然是不行的。
Person::enter();
            cin.sync();
            cin.clear();
            cout<<"输入职称:";
            cin.getline(input, 80);
            zhichen = input;
            cout<<"输入部门:";
            cin.getline(input, 80);
            bumen = input;

那个请问一下:这段代码里面的
cin.sync();
            cin.clear();

这两句的意思是什么?如果去掉这两句话,运行就错误了。
#14
lucky5635912011-05-14 07:40
gets就可以
#15
ishagua2011-05-21 02:22
1