zgbl 发表于 2009-6-10 20:10:06

问个很囧的问题

在做ACM的期末题,当初偷懒了几节课,结果所有没做出来的都卡在一处了

一行输入N个数据(不知N是多少,只知道N的范围),如何将其读取并且分别储存到一组变量里

郁闷死啊郁闷死,求教各位大神,我也搜两道例题看看去
郁闷,搜了好几题,都是已知N的个数的,囧ing

说一句,要C的……

duno 发表于 2009-6-10 20:24:13

c已经扔得差不多了。。。囧

char buf
gets(buf)
buf 按指定格式划分转数组

这个意思?

zgbl 发表于 2009-6-10 20:30:40

恩,scanf估计行不通,想过用数组存,但这样存起来每一位都是一个元素,不好计算,比如输入:
2 15 36 153 4
会存成
'2',' ','1','5',' ','3','6',' ','1','5','3',' ','4'
好好的一个数字就这样分开了,还要很麻烦的重组起来,不知道有没有方便点的录入方法?

duno 发表于 2009-6-10 20:56:43

#include "stdio.h"

int WordToNum (char* word, int len) {
      int num = 0;
      for (int i = 0; i < len; i++) {
                num *= 10;
                num += (word - '0');
      }
      return num;
}
int* Convert(char* buf, int len) {
      char word;
      int wordIndex = 0;
      int* result = new int;
      result = 0;
      
      for (int i = 0;i < len; i++) {
                if (buf == ' ') {
                        result ++;
                        result] = WordToNum(word, wordIndex);
                        wordIndex = 0;
                } else {
                        word = buf;
                        wordIndex ++;
                }
      }
      if (wordIndex > 0) {
                result] = WordToNum(word, wordIndex);
      }
      return result;
}
int main() {
      char buf;
      gets(buf);
      int len = 0;
      for (int i = 0; i < 100; i++) {
                if (buf == '\0') {
                        len = i;
                        break;
                }
      }
      printf("\ninpute: %s\n", buf);
      printf("\nlen=%d\n", len);
      int* result = Convert(buf, len);
      printf("\n#result = %d\n", result);
      for (int i = 1; i <= result; i++)
                printf("\n%d", result);
}

duno 发表于 2009-6-10 20:59:41

输出:
C:\C_src>g++ test.cpp -o test
C:\C_src>test
1 2 3 4 5 6 10 200 3000 40000 500000
inpute: 1 2 3 4 5 6 10 200 3000 40000 500000
len=36
#result = 10
1
2
3
4
5
6
10
200
3000
500000
C:\C_src>

zgbl 发表于 2009-6-10 21:13:10

还是用数组转化啊,好麻烦,呵呵,没办法了,就这样吧,谢了!

duno 发表于 2009-6-10 21:16:09

你们老师要是允许用库的话,找个string的库,会简单很多,几个api一组合就差不多了

ppeng 发表于 2009-6-11 02:52:35

还有在游戏论坛上写作业的
admire 这个玻璃

zgbl 发表于 2009-6-11 18:48:48

搞定了

还是不想用string的玩法,回去再详细查了下scanf的语句,找到解了

给的数据不知道N为多少,但是是以0为结束标记,所以可以这样
设n的最大数量为N,则程序可以为


int i;
int n;
int len;
for(i=0,len=1;i<n;i++)
{
scanf("%d",&n);
len++;
if(a==0)
    break;
}

如此即可

duno 发表于 2009-6-11 22:47:17

分项输入的阿,看来俺是需求理解错误。。。囧

又看了一遍自己写的东西,可以通过char*的\0方式结束,不一定要传个len进去
果然扔得差不多了ttk_33

[ 本帖最后由 duno 于 2009-6-11 10:54 PM 编辑 ]
页: [1]
查看完整版本: 问个很囧的问题