谁知道在c++中输入一个字符串,包括空格?

jianhuili 2010-06-03 10:25:47
我知道有个

用到 char a[100];cin.getline(a,100);像这样的格式,
问问大家还有没有其他的格式,
cin>>a;是不行的。而c++中又不能用gets();
请高手帮帮忙。
...全文
4707 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianhuili 2010-06-04
  • 打赏
  • 举报
回复
感谢大家咯
tjyjx7946358 2010-06-03
  • 打赏
  • 举报
回复
直接给你看一帖子。我从网上转来的。
学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息;
1、cin
1、cin.get()
2、cin.getline()
3、getline()
4、gets()
5、getchar()

1、cin>>

用法1:最基本,也是最常用的用法,输入一个数字:

#include <iostream>
using namespace std;
main ()
{
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
}

输入:2[回车]3[回车]
输出:5

用法2:接受一个字符串,遇“空格”、“TAB”、“回车”都结束

#include <iostream>
using namespace std;
main ()
{
char a[20];
cin>>a;
cout<<a<<endl;
}

输入:jkljkljkl
输出:jkljkljkl

输入:jkljkl jkljkl //遇空格结束,所以不能输入多个单词
输出:jkljkl

2、cin.get()

用法1: cin.get(字符变量名)可以用来接收字符

#include <iostream>
using namespace std;
main ()
{
char ch;
ch=cin.get(); //或者cin.get(ch);只能获取一个字符
cout<<ch<<endl;
}

输入:jljkljkl
输出:j

用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格

#include <iostream>
using namespace std;
main ()
{
char a[20];
cin.get(a,20); //有些类似getline。可以输入多个单词,中间空格隔开。
cout<<a<<endl;
}

输入:jkl jkl jkl
输出:jkl jkl jkl

输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)
输出:abcdeabcdeabcdeabcd (接收19个字符+1个'\0')

用法3:cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足.

这个我还不知道怎么用,知道的前辈请赐教;

3、cin.getline() // 接受一个字符串,可以接收空格并输出

#include <iostream>
using namespace std;
main ()
{
char m[20];
cin.getline(m,5); //与上面基本相同。
cout<<m<<endl;
}
tjyjx7946358 2010-06-03
  • 打赏
  • 举报
回复

string str;
getline(cin,str);

这样可以。。
starcat 2010-06-03
  • 打赏
  • 举报
回复
Oh my God,为了满足要求,我竟然把C++代码写得那么ugly
I'm terribly sorry!
#include <iostream>
#include <string>
using namespace std;

int main() {
string s;
char ch;
while((ch = cin.get()) != '\n')
s.append(1, ch);
cout << s << endl;
return 0;
}


Pslly_001 2010-06-03
  • 打赏
  • 举报
回复
#include <iostream>
#include <cstring>

using namespace std;

void main()
{
char a[100];
for(int i = 0; i < 100; i++)
{
a[i] = getchar();
}
}
zsy743572316 2010-06-03
  • 打赏
  • 举报
回复
加个头文件string.h呗,c++也支持啊
fanster28_ 2010-06-03
  • 打赏
  • 举报
回复
scanf里面的匹配模式可以使用简单的正则表达式

scanf("%[^\n]",val);


jianhuili 2010-06-03
  • 打赏
  • 举报
回复
我试了,不能用gets();
jianhuili 2010-06-03
  • 打赏
  • 举报
回复
没事,重在参与,呵呵
hnzkfelix 2010-06-03
  • 打赏
  • 举报
回复
呵呵 ,不好意思,写成C的啦!
hnzkfelix 2010-06-03
  • 打赏
  • 举报
回复
简单的一个测试程序:
#include <stdio.h>

int main()
{
char val[64];
scanf("%[^\n]",val);//扫描stdin缓冲区
printf("%s\n",val);
return 0;
}
在visual c++ 6.0 经测试可以输入一个包括空格的字符串!希望对你有所帮助
lirg8405 2010-06-03
  • 打赏
  • 举报
回复
要不你就写类吧,重载运算符>>
pengzhixi 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 jianhuili 的回复:]
我知道有个

用到 char a[100];cin.getline(a,100);像这样的格式,
问问大家还有没有其他的格式,
cin>>a;是不行的。而c++中又不能用gets();
请高手帮帮忙。
[/Quote]
既然学C++那就用getline
elegant87 2010-06-03
  • 打赏
  • 举报
回复
C++中没哟gets()的
你可以自己定义一函数来实读取空格
windsting 2010-06-03
  • 打赏
  • 举报
回复
...谁说C++中不能用gets()?你试了么?
另外,在换行前的字符数未知的情况下,用string比较好:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string sLine;
getline(cin,sLine);
cout << "your string is:\m" << sLine << endl;
}

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧