C语言期末复习题(PTA)

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

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

输入样例:

abcd efg abc fH 3 2 1

输出样例:

123Habcdefg

测试程序样例:

cpp 复制代码
#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代码:

cpp 复制代码
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码是多少,所以我们可以用以下代码知道大致范围:

cpp 复制代码
#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

测试程序样例:

cpp 复制代码
#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代码:

cpp 复制代码
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

测试程序样例:

cpp 复制代码
#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代码:

cpp 复制代码
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()。

相关推荐
浊酒南街28 分钟前
XGBClassifiler函数介绍
算法·机器学习·xgb
蜡笔小新..31 分钟前
R语言和RStudio安装
开发语言·r语言
ALPH_31 分钟前
R语言的基础命令及实例操作
开发语言·数据分析·r语言·perl·r语言-4.2.1
mlxg9999934 分钟前
hom_mat2d_to_affine_par 的c#实现
算法·计算机视觉·c#
咩咩觉主35 分钟前
C# &Unity 唐老狮 No.6 模拟面试题
开发语言·unity·面试·c#·游戏引擎·唐老师
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧3 小时前
C语言_数据结构总结8:链式队列
c语言·开发语言·数据结构·链表·visualstudio·visual studio
千里码aicood3 小时前
[含文档+PPT+源码等]精品基于Python实现的校园小助手小程序的设计与实现
开发语言·前端·python
讨厌下雨的天空3 小时前
C++之list
开发语言·c++·list
大麦大麦4 小时前
深入剖析 Sass:从基础到进阶的 CSS 预处理器应用指南
开发语言·前端·css·面试·rust·uni-app·sass
hhw1991124 小时前
c#面试题整理6
java·开发语言·c#