欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > xdoj-字符串-556,为什么字符不能被正常读入

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

2025/9/19 5:20:49 来源:https://blog.csdn.net/Komorebi_awa/article/details/144935141  浏览:    关键词:xdoj-字符串-556,为什么字符不能被正常读入

目录

题目

代码

测试用例

the input

the correct output

问题发现过程阐述

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

case 1

case 2

case 3

如果数组开成11

case4

代码分析

问题描述

Question1

Question2


题目


题目:连续数字字符串提取
问题描述
输入一个字符串,将连续的数字字符串放到另一个二维数组中
输入格式
输入一个含连续数字的待提取字符串。
输出格式
输出提取出来的数字字符串,每个连续数字字符串占一行。
样例输入
1234abc7654321[][]79869hewl98765
样例输出
1234
7654321
98765
样例说明
79869不连续,不输出。
评测用例规模与约定
提取出来的连续数字字符串长度不超过20,输入字符串内至多含有10个连续字符串,
时间限制1s,内存限制256KB。(注:1287视为整体,不属于连续数字字符串,不可被看
为是12与87两个连续数字字符串。单独的数字如1,视为连续字符串,需要加以输出)

代码

#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;//extractionfor(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 outputfor(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[]开得足够大了

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词