北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 1804|回复: 9

问个很囧的问题

[复制链接]
发表于 2009-6-10 20:10:06 | 显示全部楼层 |阅读模式
在做ACM的期末题,当初偷懒了几节课,结果所有没做出来的都卡在一处了

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

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

说一句,要C的……
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-6-10 20:24:13 | 显示全部楼层
c已经扔得差不多了。。。囧

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

这个意思?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-6-10 20:30:40 | 显示全部楼层
恩,scanf估计行不通,想过用数组存,但这样存起来每一位都是一个元素,不好计算,比如输入:
2 15 36 153 4
会存成
'2',' ','1','5',' ','3','6',' ','1','5','3',' ','4'
好好的一个数字就这样分开了,还要很麻烦的重组起来,不知道有没有方便点的录入方法?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 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[100];
        int wordIndex = 0;
        int* result = new int[100];
        result[0] = 0;
        
        for (int i = 0;i < len; i++) {
                if (buf == ' ') {
                        result[0] ++;
                        result[result[0]] = WordToNum(word, wordIndex);
                        wordIndex = 0;
                } else {
                        word[wordIndex] = buf;
                        wordIndex ++;
                }
        }
        if (wordIndex > 0) {
                result[result[0]] = WordToNum(word, wordIndex);
        }
        return result;
}
int main() {
        char buf[100];
        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[0]);
        for (int i = 1; i <= result[0]; i++)
                printf("\n%d", result);
}
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 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>
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-6-10 21:13:10 | 显示全部楼层
还是用数组转化啊,好麻烦,呵呵,没办法了,就这样吧,谢了!
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-6-10 21:16:09 | 显示全部楼层
你们老师要是允许用库的话,找个string的库,会简单很多,几个api一组合就差不多了
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-6-11 02:52:35 | 显示全部楼层
还有在游戏论坛上写作业的
admire 这个玻璃
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-6-11 18:48:48 | 显示全部楼层

搞定了

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

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


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

如此即可
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-6-11 22:47:17 | 显示全部楼层
分项输入的阿,看来俺是需求理解错误。。。囧

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

[ 本帖最后由 duno 于 2009-6-11 10:54 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-4-27 05:39 PM , Processed in 0.009683 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表