问题描述
- 新手求教,关于传递字符串数组的问题
-
以下是我写的c primer plus 第11章习题10的程序,问题是我输入字符串后,用1以外的方式排序,就无法恢复原序列了。也就是每次调用函数都改变了原本数组的顺序,我实在找不到问题出在哪。特请高手指教,如果我的代码还有其他的什么毛病也请指出来。O(∩_∩)O谢谢#include<stdio.h> #include<string.h> #include<ctype.h> #define LIM 10 #define MAX 81 // 显示菜单函数 void display(void) { puts("******************************************"); puts("1)Print original string"); puts("2)Print in order of ASCII"); puts("3)Print in order of string's length"); puts("4)Print in order of first word's length"); puts("5)quit"); puts("******************************************"); } // 判断字符串中第一个单词长度 int w_l(const char *s) { int length; while(isspace(*s)) // 跳过空白字符 s++; while(*s) // 遇到空字符就退出循环 { if(!isspace(*s)) // length++; s++; } return length; } // 原样打印字符串 void opt1(char *msg[], int n) { int i; for(i = 0; i<n; i++) puts(msg[i]); } // 按ASCII码顺序打印字符串 void opt2(char *msg[], int n) { int i, j; char *temp; for(i = 0; i<n-1 ; i++) for(j = i+1; j<n; j++) if(strcmp(msg[i], msg[j]) > 0) { temp = msg[i]; msg[i] = msg[j]; msg[j] = temp; } for(i = 0; i<n; i++) puts(msg[i]); } // 按字符串长度打印 void opt3(char *msg[], int n) { int i, j; char *temp; for(i = 0; i<n-1 ; i++) for(j = i+1; j<n; j++) if(strlen(msg[i]) > strlen(msg[j])) { temp = msg[i]; msg[i] = msg[j]; msg[j] = temp; } for(i = 0; i<n; i++) puts(msg[i]); } // 按第一个单词长度打印 void opt4(char *msg[], int n) { int i, j; char *temp; for(i = 0; i<n-1 ; i++) for(j = i+1; j<n; j++) if(w_l(msg[i]) > w_l(msg[j]) ) { temp = msg[i]; msg[i] = msg[j]; msg[j] = temp; } for(i = 0; i<n; i++) puts(msg[i]); } // 调用驱动函数 int main(void) { char msg[LIM][MAX]; char *ptstr[LIM]; int i, choice; puts("Input strings:"); for(i = 0; i < LIM && gets(msg[i]) != NULL; i++) // 将字符串存入数组 { ptstr[i] = msg[i]; } display(); while(scanf("%d", &choice) == 1 && choice != 5) // 菜单选择 { switch(choice) { case 1: opt1(ptstr, i); break; case 2: opt2(ptstr, i); break; case 3: opt3(ptstr, i); break; case 4: opt4(ptstr, i); break; } display(); } puts("Bye."); return 0; }
解决方案
你改写了原数组,你在方法内部声明一个临时数组,来排序,不要改写原有的
解决方案三:
字符串数组的问题!
字符数组与字符串的问题
15.2.2.5 传递字符串数组
时间: 2024-09-25 15:24:32