📜  C测验– 112 |问题3(1)

📅  最后修改于: 2023-12-03 14:40:26.343000             🧑  作者: Mango

C测验-112 | 问题3

本题所涉及的题目为C语言编写的题目,主要考察程序员对于C语言中数组、指针等知识的掌握程度。

题目描述

给定一个字符串数组,要求将其中所有长度小于等于3的字符串删除,结果返回新的字符串数组。

输入格式
  • 一个字符串数组
输出格式
  • 删除长度小于等于3的字符串后的新字符串数组
示例输入
char *strArr[] = {"hello", "world", "c", "is", "awesome"};
示例输出
char *result[] = {"hello", "world", "awesome"};
题目解析

本题主要考查程序员在C语言中如何操作字符串数组,可以使用指针和循环遍历的方法。一种解题思路为:

  • 声明一个新的字符串数组,长度等于原数组长度。由于不知道有多少个长度大于3的字符串,原数组长度需要进行预留。
  • 初始化新数组下标为0
  • 循环遍历原数组
  • 对于原数组中每一个字符串,判断其长度是否大于3
  • 若大于3,则将其添加到新数组中,新数组下标加1
  • 若小于等于3,则不做处理
  • 遍历完成后,根据新数组下标大小,重新分配字符串数组的大小,并将新数组中元素复制到新的字符串数组中
代码实现
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char** removeSmallString(char** strArr, int strArrSize, int* retSize){
    char **res=malloc(sizeof(char *)*strArrSize);
    *retSize = 0; // 初始化新数组下标为0
    for(int i=0;i<strArrSize;i++){ // 循环遍历原数组
        if(strlen(strArr[i]) > 3){ // 判断字符串长度是否大于3
            res[(*retSize)++]=strArr[i]; // 如果大于3,加入新数组
        }
    }
    return res; // 返回新的字符串数组
}

int main(){
    char *strArr[] = {"hello", "world", "c", "is", "awesome"};
    int strArrSize = sizeof(strArr) / sizeof(strArr[0]);
    int retSize;
    char **result = removeSmallString(strArr, strArrSize, &retSize);
    printf("{");
    for(int i=0;i<retSize;i++){
        printf("\"%s\"",result[i]); // 输出结果
        if(i!=retSize-1){
            printf(",");
        }
    }
    printf("}\n");
    free(result);
    return 0;
}
代码说明
  • char** removeSmallString(char** strArr, int strArrSize, int* retSize): 删除长度小于等于3的字符串后的新字符串数组,retSize为新数组长度
  • *res=malloc(sizeof(char *)*strArrSize): 初始化新数组为原数组大小
  • if(strlen(strArr[i]) > 3): 判断字符串长度是否大于3
  • res[(*retSize)++]=strArr[i]: 如果大于3,加入新数组
  • char **result = removeSmallString(strArr, strArrSize, &retSize): 调用函数,得到结果数组
  • printf("\"%s\"",result[i]): 输出结果数组
  • free(result): 释放动态内存