xdoj-字符串-556,为什么字符不能被正常读入

目录

题目

代码

测试用例

[the input](#the input)

[the correct output](#the correct output)

问题发现过程阐述

如果把line16中的数组大小11换成line17中的10

[case 1](#case 1)

[case 2](#case 2)

[case 3](#case 3)

如果数组开成11

case4

代码分析

问题描述

Question1

Question2


题目

题目:连续数字字符串提取

问题描述

输入一个字符串,将连续的数字字符串放到另一个二维数组中

输入格式

输入一个含连续数字的待提取字符串。

输出格式

输出提取出来的数字字符串,每个连续数字字符串占一行。

样例输入

1234abc7654321[][]79869hewl98765

样例输出

1234

7654321

98765

样例说明

79869不连续,不输出。

评测用例规模与约定

提取出来的连续数字字符串长度不超过20,输入字符串内至多含有10个连续字符串,

时间限制1s,内存限制256KB。(注:1287视为整体,不属于连续数字字符串,不可被看

为是12与87两个连续数字字符串。单独的数字如1,视为连续字符串,需要加以输出)

代码

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

short continuity_judge(char * s,short n);
int main()
{
    char s[211] = "";
    gets(s);

    typedef struct
    {
        char nums[21];
        short total;
    }STRINGS;
    STRINGS strings[11];
    //STRINGS strings[10];
    short index = 0,i = 0;

    //extraction
    for(char *p = s;*p;p++)
    {
        while(*p && isdigit(*p))
        {
            strings[index].nums[i++] = *p++;
        }
        if(i){
            strings[index].total = i;
            strings[index].nums[i] = '\0';
            i = 0;
            index++;
        }
    }

    //judge and output
    for(i = 0;i < index;i++)
    {
        if(continuity_judge(strings[i].nums,strings[i].total)){
            puts(strings[i].nums);
        }
    }
    return 0;
}
short continuity_judge(char * s,short n)
{
    if(n == 1)
        return 1;
    short deta = s[1] - s[0];
    if(deta != 1 && deta != -1 )
        return 0;
    for(int i = 1;i < n-1;i++)
    {
        if(s[i+1] - s[i] != deta)
            return 0;
    }
    return 1;
}

测试用例

the input

42193@2__123nxoq81x01u3&123xq0981d80192j81028!@93121238ydiqw123jdw1cu012

the correct output

2

123

01

3

123

123

1

012

问题发现过程阐述

问题在line16,line17

如果把line16中的数组大小11换成line17中的10

case 1

输入

42193@2__123nxoq81x01u3&123xq0981d80192j81028!@93121238ydiqw123jdw1cu012

输出就变成了

2

123

01

3

123

123

1

0

最后一项少了12

并且通过调试,这一项在strings数组最后一项的nums字符串里确实被存成了0,证明12未被读入

case 2

如果输入少进一个字符

2193@2__123nxoq81x01u3&123xq0981d80192j81028!@93121238ydiqw123jdw1cu012

输出就

2

123

01

3

123

123

1

01

多读进来一个

case 3

再少输入进一个字符

193@2__123nxoq81x01u3&123xq0981d80192j81028!@93121238ydiqw123jdw1cu012

输出

2

123

01

3

123

123

1

012

正常了

如果数组开成11

case4

输入

42193@2__123nxoq81x01u3&123xq0981d80192j81028!@93121238ydiqw123jdw1cu012

输出

2

123

01

3

123

123

1

012

正常了

代码分析

仔细解读代码后发现其实strings[]数组开得有问题,这个输入中有14个数字串,数组开得不够大

问题描述

Question1

为什么数组开到11就正常了,明明有14个数字串,按理来说即使改成11,后面三个应该无法读入才对

Question2

为什么在数组开到10时会出现这种最后几个字符没被读入,改变输入序列长度就能读进去的情况,

这看着反倒像是s[]数组开得不够大,但实际是s[]开得足够大了

相关推荐
qq7422349845 小时前
APS系统与OR-Tools完全指南:智能排产与优化算法实战解析
人工智能·算法·工业·aps·排程
数智工坊5 小时前
【数据结构-树与二叉树】4.5 线索二叉树
数据结构
2的n次方_5 小时前
Runtime 内存管理深化:推理批处理下的内存复用与生命周期精细控制
c语言·网络·架构
嵌入小生0076 小时前
标准IO---核心函数接口延续(嵌入式Linux)
c语言·vscode·vim·嵌入式·小白·标准io·函数接口
A尘埃6 小时前
超市购物篮关联分析与货架优化(Apriori算法)
算法
.小墨迹6 小时前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
数智工坊6 小时前
【数据结构-树与二叉树】4.3 二叉树的存储结构
数据结构
独好紫罗兰6 小时前
对python的再认识-基于数据结构进行-a004-列表-实用事务
开发语言·数据结构·python
不穿格子的程序员6 小时前
从零开始刷算法——贪心篇1:跳跃游戏1 + 跳跃游戏2
算法·游戏·贪心
大江东去浪淘尽千古风流人物6 小时前
【SLAM新范式】几何主导=》几何+学习+语义+高效表示的融合
深度学习·算法·slam