小红拿到了一个长度为的,仅包含小写字母的字符串,请你取出所有长度恰好为 2 的连续子串,并将它们按字典序升序输出。 字典序的定义:两个字符串和,从左到右数第一个不相同的字符,ascii 码更小的所属的字符串字典序更小。例如,”ab”的字典序小于”ca”。
区块链毕设网qklbishe.com为您提供问题的解答
小红拿到了一个长度为的,仅包含小写字母的字符串
,请你取出所有长度恰好为 2 的连续子串,并将它们按字典序升序输出。
字典序的定义:两个字符串和
,从左到右数第一个不相同的字符,ascii 码更小的所属的字符串字典序更小。例如,”ab”的字典序小于”ca”。
#include <stdio.h> #include <string.h> #include <stdlib.h> // 比较函数,用于qsort,按字母顺序排序 int compare(const void *a, const void *b) { return strcmp(*(const char **)a, *(const char **)b); } //a 和 b 是 void* 类型的指针,需要转换为适当的类型才能使用。由于 sub_strings 是一个 char**(即指向字符指针的指针),我们需要将 a 和 b 转换为 const char**。 //*(const char **)a 解引用 a,得到一个 const char*,即指向第一个子串的指针。 //同理,*(const char **)b 得到指向第二个子串的指针。 int main() { char a[100000]; // 假设输入字符串最长为99999个字符 int i,j; if (fgets(a, sizeof(a), stdin) == NULL) { return 0; // 读取失败或EOF } // 移除换行符 size_t len = strlen(a); if (len > 0 && a[len - 1] == 'n') { a[len - 1] = ' '; } len = strlen(a); if (len < 2) { // 如果字符串长度小于2,没有相邻子串 return 0; } // 计算子串数量 int num_substrings = len - 1; char **sub_strings = malloc(num_substrings * sizeof(char *)); if (sub_strings == NULL) { perror("malloc failed"); return 1; } // 生成所有相邻子串 for (i = 0; i < num_substrings; i++) { sub_strings[i] = malloc(3); // 最多两个字符加一个空字符 if (sub_strings[i] == NULL) { perror("malloc failed"); // 释放已分配的内存 for (j = 0; j < i; j++) { free(sub_strings[j]); } free(sub_strings); return 1; } snprintf(sub_strings[i], 3, "%c%c", a[i], a[i + 1]); } // 排序子串 qsort(sub_strings, num_substrings, sizeof(char *), compare); // 输出排序后的子串 for (i = 0; i < num_substrings; i++) { printf("%sn", sub_strings[i]); free(sub_strings[i]); // 释放每个子串的内存 } free(sub_strings); // 释放子串数组的内存 return 0; }
09:36
以上就是关于问题小红拿到了一个长度为的,仅包含小写字母的字符串,请你取出所有长度恰好为 2 的连续子串,并将它们按字典序升序输出。
字典序的定义:两个字符串和,从左到右数第一个不相同的字符,ascii 码更小的所属的字符串字典序更小。例如,”ab”的字典序小于”ca”。的答案
欢迎关注区块链毕设网-
web3一级市场套利打新赚钱空投教程
区块链NFT链游项目方科学家脚本开发培训