荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: bakey (深海的鱼爱上会潜水的猫), 信区: Program
标  题: [合集]关于C++,cin.get的问题.
发信站: 荔园晨风BBS站 (2005年06月02日23:25:30 星期四), 站内信件

☆   1  ──────────── 我是分割线 ─────────────────☆
发信人: Netoo (见到雪啊~~~哇哈哈哈哈), 信区: Program
标  题: 关于C++,cin.get的问题.
时  间: Sun Nov  9 15:33:41 2003

题目:输入一行数字,这行数字包括2组数字,分别用空格隔开。要求,自定义
      2个子函数,分别把2组数返回主函数。如下:
#include <iostream>
using namespace std;

int getNum1();
int getNum2();

int main()
{
 int i=0;
 int j=0;
 i=getNum1();
 j=getNum2();
 cout << i << endl <<j<<endl;
}

int getNum1()
{
  int n=0;
  char token[20];
  cin.get(token,20);
  n=atoi(token);
  return n;
}

int getNum2()
{
  int n=0;
  char token[20];
  cin.get(token,20);
  ........(问题见如下)
}

例如输入:123 456, main function得到的2个值应该分别为:123和456

我的问题:
1: 在getNum2 function里面不能读取第2组数字。(ps: 2个子function一定要
    用到token数组)
2: 可以用cin.getline么?如果用的话,那么是不是会提示输入2次,而不是
    一次输入一行数字。
3: 2个子function是不能互相访问的,试问它们怎么又能同时读取一行数字?

指教,谢谢。
再附加一个问题:
定义变量temp为string类型
cin >> temp;
如果temp里面包括了空格,有什么办法可以计算出temp里面有多少个字母
或者数字?
例如:
输入LiYuanChenFeng可以准确算出几个字母
但是如果输入:Li Yuan Chen Feng,只能算出2个字母,我想应该是"Li"2个
那么就是说空格以后的算不了,请问怎么解决?
谢谢!



☆   2  ──────────── 我是分割线 ─────────────────☆
发信人: huhaiming (一生只爱她), 信区: Program
标  题: Re: 关于C++,cin.get的问题.
时  间: Sun Nov  9 15:56:15 2003


你输入的是  123 456

已经被getnum1()读进了token数组了
不信的话,你可以打印token数组看看 cout<<token<<endl;
应该是cin.get()的参数中第二个参数设置的问题
建议你用msdn查清楚了再用
我在测试中,在getnum1()中用了cin.get(token,4)
在getnum2()中用了cin.get(token,5)就能读进了你的输入方式 "123 456"

你想统计字母的那个问题,我不知道你想怎么用
可以提供一个想法就是,先把数组中的空格吃掉,然后再统计咯
去掉字符串中的空格函数描述如下:
void TrimSpace(char *str)
{
  char *s,*d;
  for( s = d = str; *d = *s++; d += (*d == ' ') ? 0 : 1 );
//也可以直接写一句:  for(char *s=str,*d=str;*d=*s++;d+=(*d==' ')?0:1);
}
吃掉空格了之后,如果是纯数字或者纯字母的,直接一个strlen(...)
就可以统计出来了,否则就需要一个for循环慢慢统计了(so easy for everyone)




☆   3  ──────────── 我是分割线 ─────────────────☆
发信人: Netoo (见到雪啊~~~哇哈哈哈哈), 信区: Program
标  题: Re: 关于C++,cin.get的问题.
时  间: Sun Nov  9 17:05:49 2003

我想也应该是由于被第一个token读去的原因
再有1个问题:
能不能把123跟456断开?
比如,当第一个token读到3后面的空格的时候加个'\0';
然后后面的456留给第2个token?
因为我这个题目要求是按空格读取4组数,那么具体的
定义token第二个参数就行不通了。
请教,谢谢!



☆   4  ──────────── 我是分割线 ─────────────────☆
发信人: Kenniel (笑翻下先^_^), 信区: Program
标  题: Re: 关于C++,cin.get的问题.
时  间: Sun Nov  9 17:43:56 2003

直接用循环一个一个来不行吗?ps:没有仔细看你的程序




☆   5  ──────────── 我是分割线 ─────────────────☆
发信人: Netoo (见到雪啊~~~哇哈哈哈哈), 信区: Program
标  题: Re: 关于C++,cin.get的问题.
时  间: Sun Nov  9 18:29:25 2003

试了不行



☆   6  ──────────── 我是分割线 ─────────────────☆
发信人: huhaiming (一生只爱她), 信区: Program
标  题: Re: 关于C++,cin.get的问题.
时  间: Sun Nov  9 22:08:20 2003


那就不要用cin.get()
我建议是直接读入一个整数就行啦,何必那么复杂呢?
 int i;
 cin>>i;
没必要要用数组存了字符再atoi()



☆   7  ──────────── 我是分割线 ─────────────────☆
发信人: Netoo (见到雪啊~~~哇哈哈哈哈), 信区: Program
标  题: Re: 关于C++,cin.get的问题.
时  间: Mon Nov 10 10:32:26 2003

唉。。。我也不知道老师他想什么的
非要我们这么用。。。
请问,能实现我所说的么?



☆   8  ──────────── 我是分割线 ─────────────────☆
发信人: huhaiming (一生只爱她), 信区: Program
标  题: Re: 关于C++,cin.get的问题.
时  间: Mon Nov 10 11:05:56 2003


那你说清楚要求吧,只是你说那样,好像不容易

强硬做成这样的话,需要一个字符一个字符地读进数组,

直到遇到空格,然后。。。。




☆   9  ──────────── 我是分割线 ─────────────────☆
发信人: Netoo (见到雪啊~~~哇哈哈哈哈), 信区: Program
标  题: Re: 关于C++,cin.get的问题.
时  间: Mon Nov 10 14:17:14 2003

嗯,比如说
在第一个token里面
一个一个的把数据读进token,用isspace判断,
碰到空格就加上'\0'断开
然后第二个token接着读剩下的,同样碰到空格
断开。
这样可以实现么?我试了好像不行。。。
thx again


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店