C语言期末复习题(PTA)

server/2024/12/31 5:37:31/

去字符串中的重复字符与空格

dele函数的功能:对给定的字符串,去掉重复的字符与字符串中的空格后,按照字符ASCII码顺序从小到大排序后输出。

输入样例:

abcd efg abc fH 3 2 1

 输出样例:

123Habcdefg

 测试程序样例:

#include<stdio.h>
#include"string.h"
void dele(char arr[]);
int main(void)
{char strA[81];gets(strA);dele(strA);puts(strA);return 0;
}/* 请在这里填写答案 */

AC代码: 

void dele(char arr[]){int m[150]={0};for (int i = 0; i < strlen(arr); i++){if (((int)arr[i]>=48&&(int)arr[i]<=57) || ((int)arr[i]>=97&&(int)arr[i]<=122) || ((int)arr[i]>=65&&(int)arr[i]<=90)){m[(int)arr[i]]=1;}}int num=0;for (int i = 48; i<=122; i++){if (m[i] == 1){arr[num++]=(char)i;}}arr[num] ='\0';
}

这是一种比较简单的思路,即去重又排序,暴力的话肯定很麻烦,主要考的是思路的转化。

用到int型和char型的转化,在一开始得知道数字和字母的ASCII码是多少,所以我们可以用以下代码知道大致范围:

#include<stdio.h>
#include"string.h"
int main(void)
{char a[6] = {'0','9', 'a','z', 'A','Z'};for (int i= 0; i<6; i++){printf("%d ", a[i]);}return 0;
}

就可以在判断语句中来筛别需要的数,最后注意一些细节,比如m数组的初始化,和arr组最后结束要加一个“\0”才能算是一个字符串。 

输入单词并排序输出

本题要求通过input()函数实现输入若干个单词(每单词的长度不超过20,单词的最大数目不超过10)。输入过程中遇到单词*END* 则提前结束输入(*END*不作为后面排序的单词),或单词数目达到10个也结束。然后调用函数paixu(),对这若干个单词按字典顺序进行排序,最后调用函数printArr()输出排序后的单词,输出的单词之间以空格进行分隔,最后一个单词后面没有空格。

输入样例:

China Britain America Japan Egypt *END*

输出样例:

After sorted:
America Britain China Egypt Japan

 测试程序样例:

#include<stdio.h>
#include<string.h>
int input(char ar2[][21]);
void paixu(char ar2[][21], int n);
void printArr(char ar2[][21], int n);
int main(void)
{char arr[10][21]={0};int n;n=input(arr);    paixu(arr,n);printArr(arr,n);return 0;
}
/* 请在这里填写答案 */

AC代码:

int input(char ar2[][21]){int num = 0;char end[6] = "*END*", str[21];while (num < 10){scanf("%s", str);if (strcmp(str, end) == 0) break;else strcpy(ar2[num++], str);}return num;
}
// 其中函数的返回值等于输入的有效单词的数目。
void paixu(char ar2[][21], int n){char temp[21];for (int i = 0; i<n; i++){for (int j = 0; j < n-i-1; j++){if (strcmp(ar2[j], ar2[j+1]) > 0){strcpy(temp, ar2[j]);strcpy(ar2[j], ar2[j+1]);strcpy(ar2[j+1], temp);}}}
}
// 其中函数完成对ar2数组中的n个字符串进行排序。
void printArr(char ar2[][21], int n){if (n == 0){printf("NO WORD");return ;}printf("After sorted:\n");for (int i = 0; i<n; i++){if (i == 0) printf("%s", ar2[i]);else printf(" %s", ar2[i]);}
}

思路:主要考了字符串的一些函数的使用和排序(这里用的是冒泡排序),注意一下strtcmp是按字典序(ASCII)码比较的,str1的字典序大于str2返回正数。其次值得注意的是scanf的结束标准为空格字符(包括空格、制表符(tab)和换行符(newline))时结束,而gets 函数确实用于从标准输入(通常是键盘)读取一行文本,直到遇到换行符(\n)或文件结束符(EOF)为止。

输入多个单词,统计以指定字母开头的单词个数

先输入一个含有多个单词的字符串,然后再输入一个字母,然后调用函数getWordNum统计该行字符中以指定字母开始的单词的个数(不区分大小写)。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

输入样例:

af Adf Dad abdde
a

 输出样例:

3

 测试程序样例:

#include<stdio.h>
int getWordNum(char ar1[],char ch) ;
int main()
{ char string[81],c,n; gets(string);                           c=getchar();n=getWordNum(string,c);printf("%d",n); return 0;
}/* 请在这里填写答案 */

AC代码:

int getWordNum(char ar1[],char ch) {int num = 0, cnt = 0;ch = tolower(ch);for (int i = 0; i < strlen(ar1); i++){if (ar1[i] == ' ') num = 0;else {if (num == 0){num++;char temp = tolower(ar1[i]);if (temp == ch) cnt++;}else num++;}}return cnt;
}

主要考字符串转化成小写字母的函数tolower()。


http://www.ppmy.cn/server/154217.html

相关文章

【HarmonyOS】鸿蒙arrayBuffer和Uint8Array互相转化

【HarmonyOS】鸿蒙arrayBuffer和Uint8Array互相转化 前言 ArrayBuffer ArrayBuffer内部包含一块Native内存&#xff0c;该ArrayBuffer的JS对象壳被分配在虚拟机本地堆&#xff08;LocalHeap&#xff09;。与普通对象一样&#xff0c;需要经过序列化与反序列化拷贝传递&#x…

计算机网络:IP地址相关知识总结

目录 一、IP地址的表现形式 1.1 十进制表示形式 1.2 二进制表示形式 1.3 转换示例介绍 二、IP地址的组成 2.1 网络ID 2.2 主机ID 2.3 示例 三、IP地址的分类 3.1 A类地址 3.2 B类地址 3.3 C类地址 3.4 D类地址 3.5 E类地址 四、常见的特殊IP地址 五、IP地址二进…

优化程序中的数据:从代数到向量解

前言 在前文笔者简单介绍了把数据迭代抽象为线性代数&#xff0c;并介绍了空间体、维度等概念。 数据复用 数据复用是一种提高程序执行效率与数据局部性的方法&#xff0c;分为自复用与组复用&#xff0c; 自复用&#xff1a;如果多个迭代访问同一个内存位置&#xff0c;那…

ref 和 reactive 的用法和区别

Vue3 中的 ref 和 reactive 都是用于创建响应式数据的工具&#xff0c;但它们在数据类型、响应式转换以及访问方式等方面存在差异。以下是详细的对比分析&#xff1a; 数据类型 ref&#xff1a;主要用于基本数据类型&#xff08;如 Number、String、Boolean 等&#xff09;。re…

钉钉h5微应用安卓报错error29 ios报错error3 加上报错52013,签名校验失败 (前端)

这两个都是应为 免登报错52013&#xff0c;签名校验失败 用户后端签名使用的url地址和前端访问地址需要严格一致&#xff0c;包括端口号。前端部分可以用alert显示出当前的location.href&#xff0c;后端部分请在签名的时候打印日志。 访问通过反向代理服务器、各种NAT等场景下…

集合晨考day18

1.JDK8HashMap数据结构 数组 单向链表 红黑树 2.HashMap特点(是否有序&#xff0c;是否可为null&#xff0c;是否可重复&#xff0c; 是否线程安全&#xff0c;初始容量多少&#xff0c;负载因子的含义&#xff0c;扩容多 少) 无序 可以为null 键不能重复 值可以重复 线程不安…

Mac 查询IP配置,网络代理

常用命令 1.查询IP ifconfig | grep "inet" 2.ping查询 ping 172.18.54.19&#xff08;自己IP&#xff09; 3.取消代理&#xff0c;通过在终端执行以下命令&#xff0c;可以取消 Git 的代理设置 git config --global --unset http.proxy git config --global …

计算机毕业设计Python+Spark知识图谱酒店推荐系统 酒店价格预测系统 酒店可视化 酒店爬虫 酒店大数据 neo4j知识图谱 深度学习 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…