题目:连续数字字符串提取 问题描述 输入一个字符串,将连续的数字字符串放到另一个二维数组中
输入格式
输入一个含连续数字的待提取字符串。
输出格式
输出提取出来的数字字符串,每个连续数字字符串占一行。
样例输入
1234abc7654321[][]79869hewl98765
样例输出
1234 7654321 98765
样例说明 79869 不连续,不输出。
评测用例规模与约定 提取出来的连续数字字符串长度不超过 20,输入字符串内至多含有 10 个连续字符串, 时间限制 1s,内存限制 256KB。
(注:1287 视为整体,不属于连续数字字符串,不可被看 为是 12 与 87 两个连续数字字符串。单独的数字如 1,视为连续字符串,需要加以输出)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
int judge(char tmp[], int len)
{
if (tmp[0] == '\0')
{
return 0;
}
int flag = 1;
int i = 0;
if (tmp[i] == tmp[i + 1] + 1)
{
flag = 1;
}
else if (tmp[i] == tmp[i + 1] - 1)
{
flag = -1;
}
for (i = 0; i < len - 1; i++)
{
if (tmp[i] != tmp[i + 1] + flag)
{
return 0;
}
}
return 1;
}
int main()
{
char str[101] = { 0 };
gets_s(str);
for (int i = 0; i < strlen(str); i++)
{
int flag = 0;//flag为1时输出'\n'
int start = 1;//若tmp有数据为1,否则为0
int count = 0;//用于定位临时数组
char tmp[101] = { 0 };//创建临时数组接受一串数据
if (isdigit(str[i]))
{
flag = 0;
}
//将数据存入tmp中
if (start == 1 && isdigit(str[i]))
{
start = 0;
tmp[count] = str[i];
count++;
i++;
}
if (isdigit(str[i]) && flag == 0 )
{
for (;; i++)
{
if (isdigit(str[i]))
{
tmp[count] = str[i];
count++;
}
else if (!isdigit(str[i]))
{
break;
}
}
}
//输出
if (judge(tmp, strlen(tmp)))
{
printf("%s", tmp);
}
if (!isdigit(str[i]) && judge(tmp, strlen(tmp)))
{
flag = 1;
}
if (flag == 1 )
{
printf("\n");
}
}
return 0;
}