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

不好意思,问个菜鸟问题,关于char类型的变量

aaron2913 发布于 2007-07-29 22:15, 715 次点击
我的一个程序中有这样一个问题,我把它简化出来
void main(void)
{
char a[100];
cin>>a;
cout<<a<<endl;
}
然后运行,在屏幕中输入字符, 如果我输入没有空格的字符如:thisisatest然后按回车,没问题立即显示:thisisatest
但是如果输入带有空格的字符如:this is a test,则只会显示this,而空格后面的字符一概不会显示,但是如果直接在程序中给字符数组a中某一个元素赋值为空格,比如:a[1]=‘ ’;然后打印在屏幕上没有问题。这是怎么回事? 是不是在用cin语句输入字符变量时,在屏幕中输入空格系统会认为什么也没有输入吗?

我在作一个自己的string类,其中要重载操作符cin>> 想要达到的效果如下:
void main(void)
{
string a;
cin>>a;
cout<<a<<endl;
}
在屏幕中输入this is a test 应该立即显示this is a test,而不是this

请各位帮帮忙吧,有什么办法吗?
7 回复
#2
a84517272007-07-29 22:55

[此贴子已经被作者于2007-7-29 22:57:59编辑过]


#3
maoguoqing2007-07-30 00:33
那你在这样呢

char a[100],b[100];
cin>>a>>b
cout<<a<<b;
他就会输出this is 了


默认情况下空格是输入数据之间的间隔符
#4
foreverlh2007-07-30 06:13
大一新生琢磨一夜后的结果。。。经测试使用成功。
#include<iostream.h>
const int MAXSIZE=100; //字符串最大长度
class string
{
private:
char ch[MAXSIZE];
public:
friend ostream &operator<<(ostream &,string &); //使用友元函数重载运算符<<和>>
friend istream &operator>>(istream &,string &);
};
ostream &operator<<(ostream &stream,string &str)
{
stream<<str.ch<<endl;
return stream;
}
istream &operator>>(istream &stream,string &str)
{
stream.getline(str.ch,MAXSIZE); //在此使用stream类的成员函数
//格式为 stream.getline(字符串,最大长度)
return stream; //就可以接受带有空格的字符串了
}
void main()
{
string a;
cin>>a;
cout<<a;
}


另外我请楼主与众位高手教我一个方法。我本想采用动态存储的方法。如果不采用编译器自带的string类,构造函数应该怎么写?
昨晚被逼无奈改用一维数组,此法浪费大量存储空间,各位有更好的想法可以提出
#5
aaron29132007-07-30 10:01
果然好使,谢啦!

如果用动态存储的方式,是不是只能用链表的方式啊?
#6
sunweihang2007-07-30 16:27
#include<iostream.h>
void main()
{
char a[100];
cout<<"请输入字符串"<<endl;
cin.getline(a,100);
cout<<a<<endl;
}

用我这段代码,很简单阿。为什么要用类呢?
#7
virusswb2007-07-30 16:32
就的使用cin.getline();
#8
leeco2007-07-30 16:51
回复:(foreverlh)大一新生琢磨一夜后的结果。。。经...
你可以在类里面放一个足够大的static的缓冲区,先把串放入缓冲区计算长度再申请空间。
1