如何通过函数实现字符串的输入排序和输出,以及内存的动态存放

img

img


做题遇到的,做了很久做不出来
想法是定义一个指针数组,但写出来一直有bug

【以下回答由 GPT 生成】

我会提供一个解决方案,它基于C语言实现了字符串的输入排序和输出,并使用动态内存来存储字符串。以下是实现此功能的步骤:

  1. 首先,我们需要定义一个函数来接收用户的输入字符串。我们可以使用scanf()函数来读取用户输入的任意长度的字符串,并将其存储在一个动态分配的字符数组中。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STRING_LENGTH 100

char* get_string() {
    char* string = (char*) malloc(MAX_STRING_LENGTH * sizeof(char));
    if (string == NULL) {
        printf("内存分配失败!");
        return NULL;
    }

    printf("请输入一个字符串:");
    scanf("%s", string);

    return string;
}
  1. 接下来,我们需要定义一个排序函数来对输入的字符串进行排序。我们可以使用C语言的内置排序函数qsort()来实现。
int compare_strings(const void* a, const void* b) {
    return strcmp(*(const char**)a, *(const char**)b);
}

void sort_strings(char** strings, int num) {
    qsort(strings, num, sizeof(char*), compare_strings);
}
  1. 最后,我们需要定义一个函数来输出排序后的字符串。我们可以简单地遍历排序后的字符串数组,并使用printf()函数打印每个字符串。
void print_strings(char** strings, int num) {
    printf("排序后的字符串:\n");
    for(int i = 0; i < num; i++) {
        printf("%s\n", strings[i]);
    }
}
  1. 最后,我们可以编写一个主函数来整合上述功能。
int main() {
    int num_strings;

    // 获取字符串数量
    printf("请输入要排序的字符串数量:");
    scanf("%d", &num_strings);

    // 分配内存来存储字符串指针数组
    char** strings = (char**) malloc(num_strings * sizeof(char*));
    if (strings == NULL) {
        printf("内存分配失败!");
        return 0;
    }

    // 获取字符串并存储到指针数组中
    for(int i = 0; i < num_strings; i++) {
        strings[i] = get_string();
    }

    // 排序字符串
    sort_strings(strings, num_strings);

    // 打印排序后的字符串
    print_strings(strings, num_strings);

    // 释放内存
    for(int i = 0; i < num_strings; i++) {
        free(strings[i]);
    }
    free(strings);

    return 0;
}

这样,我们就实现了通过函数实现字符串的输入排序和输出,并且使用动态内存来存储字符串。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

如何通过用三个函数实现字符串的输入排序和输出并在主函数调用,在输入函数使用内存的动态存放@CSDN-Ada助手