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.mzph.cn/news/203468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023_Spark_实验二十七:Linux中Crontab(定时任务)命令详解及使用教程

Crontab介绍&#xff1a; Linux crontab是用来crontab命令常见于Unix和类Unix的操作系统之中&#xff0c;用于设置周期性被执行的指令。该命令从标准输入设备读取指令&#xff0c;并将其存放于“crontab”文件中&#xff0c;以供之后读取和执行。该词来源于希腊语 chronos(χρ…

最小斯坦纳树算法介绍

最小斯坦纳树 介绍解法例题 介绍 现在有一个图&#xff0c;将它们作为全集 G ( V , E ) G(V,E) G(V,E)&#xff0c;我现在有一个这些点的子集 S S S&#xff0c; S S S大概有十几个点&#xff0c;现在想从 G G G中选出一个子图 G ′ ( V ′ , E ′ ) G(V,E) G′(V′,E′)&am…

C#无标题栏窗体拖动方法

在C#中&#xff0c;可以通过以下步骤实现无标题栏窗体拖动功能&#xff1a; 设置窗体的BorderStyle属性为None&#xff0c;这将隐藏窗体的标题栏和边框。 在窗体的MouseDown事件中&#xff0c;记录鼠标按下时的坐标。 在窗体的MouseMove事件中&#xff0c;计算鼠标移动的偏移…

【桑基图】绘制桑基图

绘制桑基图 一、绘制桑基图&#xff08;1&#xff09;方法一&#xff1a;去在线网站直接绘制&#xff08;2&#xff09;方法二&#xff1a;写html之后在vscode上运行 二、遇到的问题&#xff08;1&#xff09;当导入一些excel的时候&#xff0c;无法绘制出桑基图 一、绘制桑基图…

用23种设计模式打造一个cocos creator的游戏框架----(三)外观模式模式

1、模式标准 模式名称&#xff1a;外观模式 模式分类&#xff1a;结构型 模式意图&#xff1a;为一组复杂的子系统提供了一个统一的简单接口。这个统一接口位于所有子系统之上&#xff0c;使用户可以更方便地使用整个系统。 结构图&#xff1a; 适用于&#xff1a; 当你想为…

Nginx的安装、升级和管理

目录 一. nginx介绍 1. nginx简介 2. nginx和apache区别 二. nginx编译安装 1. 下载解压nginx安装包&#xff0c;并安装nginx依赖包 2. 创建运行用户和组 3. 编译安装并补全 4. 效验结果 三. 平滑升级nginx 1. 下载解压nginx安装包 2. 编译安装 3. 替换二进制文件 …

SpringMvc入坑系列(一)----maven插件启动tomcat

springboot傻瓜式教程用久了&#xff0c;回过来研究下SSM的工作流程&#xff0c;当然从Spring MVC开始&#xff0c;从傻瓜式入门处理请求和页面交互&#xff0c;再到后面深入源码分析。 本人写了一年多的后端和半年多的前端了。用的都是springbioot和vue&#xff0c;源码一直来…

机器学习实验六:聚类

系列文章目录 机器学习实验一&#xff1a;线性回归机器学习实验二&#xff1a;决策树模型机器学习实验三&#xff1a;支持向量机模型机器学习实验四&#xff1a;贝叶斯分类器机器学习实验五&#xff1a;集成学习机器学习实验六&#xff1a;聚类 文章目录 系列文章目录一、实验…

持续集成交付CICD: Sonarqube REST API 查找与新增项目

目录 一、实验 1.SonarQube REST API 查找项目 2.SonarQube REST API 新增项目 一、实验 1.SonarQube REST API 查找项目 &#xff08;1&#xff09;Postman测试 转换成cURL代码 &#xff08;2&#xff09;Jenkins添加凭证 &#xff08;3&#xff09;修改流水线 pipeline…

node切换版本

可打开黑窗口来进行命令输入操作&#xff1a; 1. node -v &#xff1a;查看当前版本 2.nvm list :查看已经下载的版本 3.nvm list available查看可用的node.js版本号&#xff1a; 4.nvm install node版本号(例如&#xff1a;nvm install 12.17.0)即可安装对应版本以及自动安装…

pgsql 判空并设置默认值

在 PostgreSQL 中&#xff0c;可以使用 COALESCE 函数来判断值是否为空并设置一个默认值。 例如&#xff0c;假设有一个表格 users&#xff0c;其中有一个列 username。如果 username 为空&#xff0c;则设置默认值为 ‘guest’&#xff0c;可以使用以下查询&#xff1a; SEL…

6-tornado配置文件的使用(命令行解析、文件设置)

tornado.options options 可以让服务运行前提前设置参数&#xff0c;而常见的2种设置参数方式为&#xff1a;1. 命令行设置 2. 文件设置命令行解析 使用tornado.options.define前定义&#xff0c;通常在模块的顶层。 然后&#xff0c;可以将这些选项作为以下属性的属性进行访…

损失函数(目标函数)

损失函数&#xff08;目标函数&#xff09;是用来衡量模型的预测值与实际值之间差异的函数。对于线性回归问题&#xff0c;最常用的损失函数是平方误差损失函数&#xff0c;也称为均方误差&#xff08;Mean Squared Error, MSE&#xff09;。 平方误差损失函数的形式是&#x…

某60内网渗透之跨平台横向移动【windows计划任务利用】

内网渗透 文章目录 内网渗透跨平台横向移动【windows计划任务利用】实验目的实验环境实验工具实验原理实验内容跨平台横向移动[windows计划任务利用] 实验步骤针对 WindowsXP/2003 的利用方式(at命令)针对 Windows Vista 及以上版本的利用方式(schtasks命令)跨平台横向移动…

轻快小miniconda3在linux下的安装配置-centos9stream-Miniconda3 Linux 64-bit

miniconda与anaconda的区别&#xff1a; Miniconda 和 Anaconda 是用于管理环境和安装软件包的 Python 发行版。它们之间的主要区别在于以下几点&#xff1a; 1. 安装内容和大小&#xff1a; Anaconda&#xff1a; Anaconda 是一个完整的 Python 数据科学平台&#xff0c;包含…

easyui实现省市县三级联动

一、技术: 前端采用的是easyui+jquery+jsp页面 后端采用springmvc+mybatis+mysql8 效果图 二、cascadeEasyui.jsp页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%String path = request.getContex…

wait notify

文章目录 1. API 介绍2. 怎么使用wait、notify2.1 sleep 和 wait 的区别2.2 sleep 和 wait 的使用模板 1. API 介绍 都属于 Object 对象的方法。必须获得此对象的锁&#xff0c;才能调用这几个方法&#xff0c;只有重量级锁才能调用wait、notify obj.wait() 让进入 object 监…

vue中实现数字+英文字母组合键盘

完整代码 <template><div class"login"><div click"setFileClick">欢迎使用员工自助终端</div><el-dialog title"初始化设置文件打印消耗品配置密码" :visible.sync"dialogSetFile" width"600px&quo…

持续集成交付CICD:Sonarqube自动更新项目质量配置

目录 一、实验 1.Sonarqube手动自定义质量规则并指定项目 2.Sonarqube自动更新项目质量配置 一、实验 1.Sonarqube手动自定义质量规则并指定项目 &#xff08;1&#xff09;自定义质量规则 ①新配置 ②更多激活规则③根据需求激活相应规则④已新增配置 ⑤ 查看 &#x…

Hive数据库系列--Hive数据类型/Hive字段类型/Hive类型转换

文章目录 一、Hive数据类型1.1、数值类型1.2、字符类型1.3、日期时间类型1.4、其他类型1.5、集合数据类型1.5.1、Struct举例1.5.2、Array举例1.5.3、Map举例 二、数据类型转换2.1、隐式转换2.2、显示转换 本章主要讲解hive的数据类、字段类型。官网文档地址见https://cwiki.apa…