竞赛C++数组输入问题

竞赛C++数组输入问题

如果有一道题的标准输入是这样,我们要怎么将他读进我们的数组呢?

4 9 6 6
1 2 3 4
3 3 5 6 9 15 18 15 18 30 3 3 5 6 9 15 18 15 18 30 1 9 9 25 36

我们需要解决的问题有两个
- 1.这道题并没有告诉你总共有几组数据
- 2.也没有告诉你一组数据中有多少个数字


问题1:读入EOF便结束读入

while(cin.getline(s, 1000)){
}

通过这种方式便可以每次读取一行数据,读到EOF便退出
但是此时问题也来了,我们这是读入的是一个字符串,我们要如何将之变为数组?

问题2:如何将一个字符串变为数组

long long num[100] = {0}, tmp;
        int len = 0, i;
        p = strtok(s, delim);
        sscanf(p, "%I64d", &tmp);
        num[len++] = tmp;
        while(p = strtok(NULL, delim)){
            sscanf(p, "%I64d", &tmp);
            num[len++] = tmp;
        }

我们在第三行中,调用了strtok函数,将字符串依据空格切割开来,并返回切割的字符串给p
在第四行中,通过sscanf,将一个字符串转换为了数组,存入到了tmp中
在第五行中,存入了数组
第六行便是迭代这个操作,如果无法理解的话,可以具体查询一下strtok函数的使用方法

最终代码

#include <iostream>
#include <cstdio>
#include <string.h>

using namespace std;
int main(){
    char s[10000] = "";
    char delim[] = " ";
    char *p;

    while(cin.getline(s, 1000)){
        long long num[100] = {0}, tmp;
        int len = 0, i;
        p = strtok(s, delim);
        sscanf(p, "%I64d", &tmp);
        num[len++] = tmp;
        while(p = strtok(NULL, delim)){
            sscanf(p, "%I64d", &tmp);
            num[len++] = tmp;
        }
    }
    return 0;
}

以上只是读入,读入后要怎么做就看你的咯。

如果有更好的方法,欢迎私信我,一起学习哦

                                                                    ----越尘 3.16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值