当前位置: 首页 > news >正文

c语言上机小练(有点难)

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) != '\0'; p++){if (((*p) >= '0') && ((*p) <= '9')){x = 1;break;}}//根据数组名为首元素地址判定该字符串是否为空串if ((*a) == '\0')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) != '\0'; p++)
//对该字符串整体循环一遍{if (((*p) >= '0') && ((*p) <= '9')){if (x == 0) {b[i] = (*p) - 48;//根据数字0的ASCII码值为48换算i++;}elseb[i - 1] = b[i - 1] * 10 + (*p) - 48;x = 1;}elsex = 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) != '\0'; p++){if (((*p) >= '0') && ((*p) <= '9')){x = 1;break;}}//根据数组名为首元素地址判定该字符串是否为空串if ((*a) == '\0')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) != '\0'; p++)
//对该字符串整体循环一遍{if (((*p) >= '0') && ((*p) <= '9')){if (x == 0) {b[i] = (*p) - 48;//根据数字0的ASCII码值为48换算i++;}elseb[i - 1] = b[i - 1] * 10 + (*p) - 48;x = 1;}elsex = 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;}

 

 

http://www.lryc.cn/news/254341.html

相关文章:

  • <JavaEE> 什么是线程安全?产生线程不安全的原因和处理方式
  • Kotlin 中的 also 和 run:选择正确的作用域函数
  • ZKP Understanding Nova (1): MinRoot Example
  • 0基础学java-day14
  • 创建conan包-工具链
  • IntelliJ IDE 插件开发 | (二)UI 界面与数据持久化
  • 使用vue UI安装路由插件
  • RPG项目01_脚本代码
  • 目标检测YOLO实战应用案例100讲-交通目标数据集构建及高性能检测算法研究与应用
  • 浅谈Vue.js的计算属性computed
  • Linux常用指令详解
  • Nginx(性能优化)
  • 机器学习笔记 - 如何在Python中对网格和点云进行体素化?
  • 冒个泡!OceanBase亮相 2023 新加坡金融科技节
  • 正则表达式(5):常用符号
  • Web安全漏洞分析-XSS(下)
  • 金南瓜SECS/GEM C# SDK 快速使用指南
  • 在一个没有超级用户的mongodb 生产库上如何添加超级用户
  • 排序算法之二:冒泡排序
  • 一键搭建你的hnust请假条
  • C练习题13
  • 交易历史记录20231206 记录
  • 1-5总体分布的推断
  • 深信服技术认证“SCSA-S”划重点:XSS漏洞
  • MIT6S081-Lab2总结
  • CMMI5大成熟度等级和4大过程域
  • c++新经典模板与泛型编程:const修饰符的移除与增加
  • AUTOSAR汽车电子嵌入式编程精讲300篇-基于加密算法的车载CAN总线安全通信
  • 4-Docker命令之docker start
  • AWS Remote Control ( Wi-Fi ) on i.MX RT1060 EVK - 2 “架构 AWS”