本文介绍: 要求:main函数存储字符串和提取得到的一组整型数,process函数负责完成提取字符串中的连续数字字符后转换为十进制整数并存入对应数组元素中,同时返回转换得到的整数个数,如果输入空串,process函数返回-1,如果非空串,但无连续数字字符,则返回0。将其中连续的数字作为一个十进制整数,依次存放到一个数组a中。这道题真的是对我来说很难,是我第一次敲了两个小时的代码了,第一个小时是完成整数寻找的设计,第二个小时是对函数进行防御机制的设计,中间代码出错,一行一行调试了很久,发现调试太好用了,哭死。
1.题目
用指向数组的指针编程实现:输入一个字符串,内有数字和非数字符号,如:a123x456(此处一个空格)17960?302tab5876。将其中连续的数字作为一个十进制整数,依次存放到一个数组a中。例如:123放在a[0]中,456放在a[1]中,17960放在a[2]中,……并统计共有多少个整数,输出这些数。要求添加合适的注释。
要求:main函数存储字符串和提取得到的一组整型数,process函数负责完成提取字符串中的连续数字字符后转换为十进制整数并存入对应数组元素中,同时返回转换得到的整数个数,如果输入空串,process函数返回-1,如果非空串,但无连续数字字符,则返回0。main函数根据process返回值决定是否展示转换成功的一组数。合理设计process函数的接口参数。
2.分析
这道题真的是对我来说很难,是我第一次敲了两个小时的代码了,第一个小时是完成整数寻找的设计,第二个小时是对函数进行防御机制的设计,中间代码出错,一行一行调试了很久,发现调试太好用了,哭死。具体的写成注释了,不赘述。
#include<stdio.h>
#define N 100 //确定字符串最大长度
//保护机制,函数防御
int process(char* a, int c)
{
char* p = a;
int x = 0;
//先判定字符串是否存在有数字,有数字的话则把x赋值为1;
for (p; (*p) != ''; p++)
{
if (((*p) >= '0') && ((*p) <= '9'))
{
x = 1;
break;
}
}
//根据数组名为首元素地址判定该字符串是否为空串
if ((*a) == '')
return -1;
//值得运行的,即既有数字又非空串
else if (x == 1)
{
return 1;
}
//单纯只有字母,不存在数字的
else
return 0;
}
//求整数部分
func(char* a, int* b, int c)
{
char *p = a;
int i = 0;
int j = 0;
int x = 0;
for (p = a; (*p) != ''; p++)
//对该字符串整体循环一遍
{
if (((*p) >= '0') && ((*p) <= '9'))
{
if (x == 0)
{
b[i] = (*p) - 48;
//根据数字0的ASCII码值为48换算
i++;
}
else
b[i - 1] = b[i - 1] * 10 + (*p) - 48;
x = 1;
}
else
x = 0;
}
}
//求主函数
int main()
{
char a[N];
int b[N] = { 0 };
int j = 0;
int flat = 0;//flat的设立是防御机制
printf("请输入一串字符n");
gets(a);
flat = process(a, N);
if (flat == 0)
{
printf("该字符串中不包含整数");
}
else if (flat == -1)
{
printf("该字符串为空串");
}
else if (flat == 1)
{
func(a, b, N);
for (j = 0; b[j] != 0; j++)
printf("%d ", b[j]);
printf("n");
printf("共有%d个", j);
}
return 0;
}
3.总代码
#include<stdio.h>
#define N 100 //确定字符串最大长度
//保护机制,函数防御
int process(char* a, int c)
{
char* p = a;
int x = 0;
//先判定字符串是否存在有数字,有数字的话则把x赋值为1;
for (p; (*p) != ''; p++)
{
if (((*p) >= '0') && ((*p) <= '9'))
{
x = 1;
break;
}
}
//根据数组名为首元素地址判定该字符串是否为空串
if ((*a) == '')
return -1;
//值得运行的,即既有数字又非空串
else if (x == 1)
{
return 1;
}
//单纯只有字母,不存在数字的
else
return 0;
}
//求整数部分
func(char* a, int* b, int c)
{
char *p = a;
int i = 0;
int j = 0;
int x = 0;
for (p = a; (*p) != ''; p++)
//对该字符串整体循环一遍
{
if (((*p) >= '0') && ((*p) <= '9'))
{
if (x == 0)
{
b[i] = (*p) - 48;
//根据数字0的ASCII码值为48换算
i++;
}
else
b[i - 1] = b[i - 1] * 10 + (*p) - 48;
x = 1;
}
else
x = 0;
}
}
//求主函数
int main()
{
char a[N];
int b[N] = { 0 };
int j = 0;
int flat = 0;//flat的设立是防御机制
printf("请输入一串字符n");
gets(a);
flat = process(a, N);
if (flat == 0)
{
printf("该字符串中不包含整数");
}
else if (flat == -1)
{
printf("该字符串为空串");
}
else if (flat == 1)
{
func(a, b, N);
for (j = 0; b[j] != 0; j++)
printf("%d ", b[j]);
printf("n");
printf("共有%d个", j);
}
return 0;
}
原文地址:https://blog.csdn.net/xdx2578/article/details/134842081
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_50259.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。