C语言-第十八周做题总结-数组3

id:454 A.字符串逆序

题目描述

输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。

输入

输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。

输出

在一行中输出逆序后的字符串。

输入样例

在这里插入图片描述

输出样例

在这里插入图片描述

题解

  • 先用一个while循环持续输入字符
  • 如果输入的字符为换行符,则退出循环,若不是,则将字符赋值给数组
  • 因为最后一个字符为’\0’,所以for循环的起始下标是倒数第二个,每次循环下标减一,直到下标小于0

代码

#include <stdio.h>
#include <stdlib.h>
# define MAX 80int main(int argc, char *argv[])
{int i, j;char ch, a[MAX];i = 0;while (ch = getchar()){if (ch == '\n'){break;}a[i] = ch;i++;}for (j = i - 1; j >= 0; j--){printf("%c", a[j]);}return 0;
}

id:452 B.查找指定字符

题目描述

本题要求编写程序,从给定字符串中查找某指定的字符。

输入

输入的第一行是一个待查找的字符。第二行是一个以回车结束的非空字符串(不超过80个字符)。

输出

如果找到,在一行内按照格式“index = 下标”输出该字符在字符串中所对应的最大下标(下标从0开始);否则输出"Not Found"。

输入样例

在这里插入图片描述

输出样例

在这里插入图片描述

题解

  • 先输入要查找的字符,然后要注意此时输入了一个换行符,也是字符,要用getchar();把它舍弃
  • 然后用一个while循环持续读入字符,将读入的字符赋值给数组,如果读入的字符为换行符,则结束循环
  • 接着用for循环来查找字符串中所要查找的字符,遍历整个数组,看是不是有相等的,若有,则将此下标赋值给一个变量,若之后又出现相同的字符,则可更新这个变量的值,若这个变量的值没有改变,即还是赋初值,则输出Not Found,否则,输出这个最大的下标

代码

#include <stdio.h>
#include <stdlib.h>
# define MAX 80int main(int argc, char *argv[])
{int i, t;char n, ch, a[MAX];i = 0;t = 0;scanf("%c", &n);getchar();while (ch = getchar()){a[i] = ch;i++;if (ch == '\n')	{break;}}for (i = 0; a[i] != '\n'; i++){if (a[i] == n){t = i;}}if (t == 0){printf("Not Found");}else{printf("index = %d", t);}return 0;
}

id:781 C.凯撒密码

题目描述

为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个整数offset,用凯撒密码将其加密后输出。恺撒密码是一种简单的替换加密技术,将明文中的所有字母都在字母表上偏移offset位后被替换成密文,当offset大于零时,表示向后偏移;当offset小于零时,表示向前偏移。

输入

输入第一行给出一个以回车结束的非空字符串(少于80个字符);第二行输入一个整数offset。

输出

输出加密后的结果字符串。

输入样例

在这里插入图片描述

输出样例

在这里插入图片描述

题解

  • 用一个while循环用来持续读入不是换行符的字符,并将其赋值给数组
  • 然后读入偏移量,再用一个for循环来将数组的字符都进行偏移
  • 分为两种情况,字符为大写字母和小写字母,若为大写字母,又分为两种情况,偏移量大于零和小于零,若偏移量大于零,则将每个数组的值改变为,将原本数组的值减去字符A的得到的是与字符A的偏差,然后将这个偏差值加上偏移量,再将这个和求余26,将所得的值加上字符A极为偏移后的新的字符;若偏移量小于零,将原本数组的值减去字符A的得到的是与字符A的偏差,然后将这个偏差值加上偏移量,再加上26(因为a的后面是z),将这个和求余26,将所得的值加上字符A极为偏移后的新的字符。小写字母的处理方法雷同
  • 最后用循环来输出字符串,循环的条件是数组的值不为’\0’

代码

#include <stdio.h>
#include <stdlib.h>
# define MAX 80int main(int argc, char *argv[])
{int offset, i;char a[MAX], ch;i = 0;while ((ch = getchar()) != '\n'){a[i] = ch;i++;}scanf("%d", &offset);for (i = 0; a[i] != '\0'; i++){if (a[i] >= 'A' && a[i] <= 'Z'){if (offset >= 0){a[i] = 'A' + (a[i] - 'A' + offset) % 26;}else{a[i] = 'A' + (a[i] - 'A' + offset + 26) % 26;}}else if (a[i] >= 'a' && a[i] <= 'z'){if (offset > 0){a[i] = 'a' + (a[i] - 'a' + offset) % 26;}else{a[i] = 'a' + (a[i] - 'a' + offset + 26) % 26;}}}for (i = 0; a[i] != '\0'; i++){printf("%c", a[i]);}return 0;
}

id:448 D.输出大写英文字母

题目描述

本题要求编写程序,顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍;若无大写英文字母则输出“Not Found”。

输入

输入为一个以回车结束的字符串(少于80个字符)。

输出

按照输入的顺序在一行中输出所出现过的大写英文字母,每个字母只输出一遍。若无大写英文字母则输出“Not Found”。

输入样例

在这里插入图片描述

输出样例

在这里插入图片描述

题解

  • 先定义两个变量,一个用于存储输入的变量,一个用于存储已经输出的变量
  • 首先用while循环持续输入不是换行符的字符,然后赋值给数组
  • 然后用一个for循环来遍历整个数组,循环的条件是这个数组的值不是\0,接着用一个判断语句判断这个数组的字符是不是大写字母
  • 若是,则再用一个for循环,这个循环的目的是遍历整个用于存储输出过的字符的数组,若输入的字符与输出过的字符相等,则结束循环,并让表示这两个数组的字符相等的变量值变为1(赋初值为0),若这个变量为0,则表示这个数组的值没有输出过,则将这个数组的值赋值给表示输出过的字符的数组,并将这个字符输出,然后让表示这个字符串中存在有大写字母的变量赋值为1(赋初值为0),然后将表示这个字符与输出过的数组的字符相等的变量重新赋值为0,用于下一次判断
  • 若表示这个字符串中存在有大写字母的变量值为0,则输出Not Found
  • 注意:需要将表示输出过的字符的数组赋值为0,需要用到一个头文件

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
# define MAX 80int main(int argc, char *argv[])
{int i, j, k, x, y;char a[MAX], b[MAX], ch;memset(b, 0, sizeof(b));i = 0;j = 0;k = 0;x = 0;y = 0;while ((ch = getchar()) != '\n'){a[i] = ch;i++;}for (i = 0; a[i] != '\0'; i++){if (a[i] >= 'A' && a[i] <= 'Z'){for (k = 0; b[k] != '\0'; k++){if (a[i] == b[k]){y = 1;break;}}if (y == 0){b[j] = a[i];printf("%c", a[i]);j++;x = 1;}y = 0;}}if (x == 0){printf("Not Found");}return 0;
}

id:447 E.删除重复字符

题目描述

本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

输入

输入是一个以回车结束的非空字符串(少于80个字符)。

输出

输出去重排序后的结果字符串。

输入样例

在这里插入图片描述

输出样例

在这里插入图片描述

题解

  • 先定义两个数组,一个数组用于存储输入的字符串,一个数组用于存储已经输出过的字符串
  • 用for循环处理字符串的输入并赋值给数组,循环的条件是输入的字符不是换行符,循环内部是空语句,所以用一个分号即可,循环结束后,将\0赋值给输入完字符串后下一个数组
  • 接着再用一个for循环,目的是遍历整个字符串数组,循环的条件是数组的字符不是\0,定义一个变量表示字符串中的最小值,让这个最小值赋初值为127(因为127是ASCII码表中的最大值),再用一个for循环用来将整个字符串中的字符与当前字符做对比,定义一个用来表示当前字符没有被输出过的变量,赋初值为0,然后再用一个for循环,目的是遍历整个表示已经输出过的字符的数组,在这个循环中,判断当前字符是否已经被输出过,若是,则将表示这个已经被输出过的变量赋值为1,然后结束当前循环,接着判断用于表示当前字符是否被输出过的变量的值是否改变(值为1)以及当前变量是否小于最小值,若这个字符没有被输出过,且这个字符小于最小值,则更新这个最小值,赋值为当前字符
  • 遍历完整个目的是对比整个数组后,得到的最小值的字符会被成功赋值到表示最小值的变量中,如果这个变量不等于127,则输出这个变量,然后将这个变量复制到表示已经输出过的数组中,便于下次遇到相同的字符时不再输出

代码

#include <stdio.h>
#include <stdlib.h>
# define MAX 80int main(int argc, char *argv[])
{int i, k, x, y, j;char a[MAX], b[MAX], ch, min;x = 0;for (i = 0; (a[i] = getchar()) != '\n'; i++){;}a[i] = '\0';for (k = 0; a[k] != '\0'; k++){min = 127;for (i = 0; a[i] != '\0'; i++){y = 0;for (j = 0; j < x; j++){if (a[i] == b[j]){y = 1;break;}}if (y != 1 && min > a[i]){min = a[i];}}if (min != 127){printf("%c", min);b[x] = min;x++;}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/327798.html

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

相关文章

【大数据进阶第三阶段之Hive学习笔记】Hive基础入门

目录 1、什么是Hive 2、Hive的优缺点 2.1、 优点 2.2、 缺点 2.2.1、Hive的HQL表达能力有限 2.2.2、Hive的效率比较低 3、Hive架构原理 3.1、用户接口&#xff1a;Client 3.2、元数据&#xff1a;Metastore 3.3、Hadoop 3.4、驱动器&#xff1a;Driver Hive运行机制…

2.3_6 用信号量实现进程互斥、同步、前驱关系

2.3_6 用信号量实现进程互斥、同步、前驱关系 #mermaid-svg-fj0wp6tJGfadcT8h {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fj0wp6tJGfadcT8h .error-icon{fill:#552222;}#mermaid-svg-fj0wp6tJGfadcT8h .error-t…

在Ubuntu22.04上离线部署Tailchat(一)

一&#xff1a;Tailchat介绍 Tailchat 是一款插件化易拓展的开源 IM 应用。可拓展架构赋予 Tailchat 无限可能性。前端微内核架构 后端微服务架构 使得 Tailchat 能够驾驭任何定制化/私有化的场景&#xff0c;是面向企业与私域用户打造&#xff0c;高度自由的群组管理与定制化…

第11章 GUI Page462~476 步骤二十三,二十四,二十五 Undo/Redo ③实现“Undo/Redo”菜单项

工程六 添加“编辑”菜单和子菜单 菜单ID分别为 idMenuEditUndo 和 idMenuEditRedo 热键&#xff08;快捷键&#xff09;分别为CtrlZ 和 CtrlShiftZ 变量名分别为 MenuItemEditUndo 和 MenuItemEditRedo 分别添加事件 ActionLink类增加成员函数 运行效果&#xff1a;“添加…

C语言注意点(2)

1.使用pow函数的相关问题 局部变量n0 while(num/pow(10,n)) n; 为什么不可行 printf("%d",num/pow(10,4)%10) 为什么要提前用temp先引出来 答&#xff1a;pow函数的返回值为double类型&#xff0c;1.终止条件不会满足 2.num/pow(10,4)结果为浮点型&#xff0c;浮…

运维工程师的出路

运维工程师的出路到底在哪里&#xff1f; 你是不是也常常听到身边的运维人员抱怨&#xff0c;他们的出路到底在哪里呢&#xff1f;别着急&#xff0c;让我告诉你&#xff0c;运维人员就像是IT界的“万金油”&#xff0c;他们像“修理工”一样维修服务器&#xff0c;像“消防员…

基于日照时数计算逐日太阳辐射

基于日照时数计算逐日太阳辐射

配置cendos 安装docker 配置阿里云国内加速

由于我安装的cendos是镜像版。已经被配置好了。所以只需要更新相关配置信息即可。 输入 yum update自动更新所有配置 更新完成后输入 yum list docker-ce --showduplicates | sort -r 自动查询所有可用的docker版本 输入 yum install docker-ce docker-ce-cli container…

STM32-03-STM32HAL库

文章目录 STM32HAL库1. HAL库介绍2. STM32Cube固件包3. HAL库框架结构4. 新建HAL版本MDK工程 STM32HAL库 1. HAL库介绍 HAL库 HAL&#xff0c;英文全称 Hardware Abstraction Layer&#xff0c;即硬件抽象层。HAL库是ST公司提供的外设驱动代码的驱动库&#xff0c;用户只需要调…

LiveGBS流媒体平台GB/T28181功能-用户管理通道权限管理关联通道支持只看已选只看未选添加用户备注角色

LiveGBS功能用户管理通道权限管理关联通道支持只看已选只看未选添加用户备注角色 1、用户管理2、添加用户3、关联通道3.1、只看已选3.2、只看未选 4、自定义角色5、搭建GB28181视频直播平台 1、用户管理 LiveGBS支持用户管理&#xff0c;添加用户&#xff0c;及配置相关用户权…

书摘:C 嵌入式系统设计模式 06

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述原书第 2 章的内容。 作为嵌入…

Kali Linux——获取root权限

目录 一、设置root密码 【操作命令】 【操作实例】 二、临时获取root权限 【操作命令】 【操作实例】 三、提升用户到root 1、获取root权限 2、进入/etc/passwd 3、查看root账号ID 4、找到需要修改的用户 5、输入i&#xff0c;进入编辑模式 6、把用户的ID改成跟r…