如何移除C语言数组初始化的方括号?无方括号数组排序问题
解决无方括号的C语言字符排序问题
完整实现代码
#include <stdio.h> #include <stdlib.h> // 交换两个字符的函数 void swap(char *a, char *b) { char temp = *a; *a = *b; *b = temp; } // 排序函数:按字母顺序排序,全程无方括号操作 void sort(char *str, int length) { for (int i = 0; i < length - 1; i++) { for (int j = i + 1; j < length; j++) { // 用指针偏移代替方括号访问字符 if (*(str + i) > *(str + j)) { swap(str + i, str + j); } } } } int main() { const int MAX_SIZE = 80; // 动态分配字符数组,无需方括号 char *str = malloc(MAX_SIZE * sizeof(char)); if (!str) { printf("内存分配失败\n"); return 1; } printf("输入最多80个字符(可包含空格):"); // 读取一行输入,处理更便捷 fgets(str, MAX_SIZE, stdin); // 计算实际输入长度(去除末尾换行符) int length = 0; while (*(str + length) != '\n' && *(str + length) != '\0') { length++; } // 替换换行符为字符串结束符 if (*(str + length) == '\n') { *(str + length) = '\0'; } sort(str, length); printf("排序后的结果:%s\n", str); free(str); return 0; }
关键问题修正与说明
去掉所有方括号
全程用*(str + i)指针偏移语法替代str[i],完全符合“禁止使用方括号”的要求。纠正你的代码错误
- 你之前用
char *str[size]定义指针数组是冗余设计,单个动态分配的字符数组char *str就足够存储所有输入字符; - 用
strcmp比较单个字符是错误用法,strcmp用于字符串比较,单个字符直接通过ASCII值用>/<比较即可; swap函数必须传递字符的地址(指针),才能修改原数组中的字符值,之前的调用方式无法实现有效交换。
- 你之前用
可选的逐个输入版本
如果要像你最初代码那样逐个输入字符,可替换main函数中的输入逻辑:printf("输入最多80个字符,逐个输入:\n"); int length = 0; while (length < MAX_SIZE - 1) { // 预留结束符位置 printf("输入第%d个字符:", length + 1); scanf(" %c", str + length); // 允许回车提前结束输入 if (*(str + length) == '\n') break; length++; } *(str + length) = '\0';
内容的提问来源于stack exchange,提问作者JustSam
相关产品推荐
相关产品推荐

