选择实现字符串的各种功能
第一次编写那么长的程序。。虽然简单。。写完了后人都晕了。。麻烦看看下面的错误咋个纠正啊?
或者哪些地方写的不好,也请说一下。。谢谢!
#include<stdio.h>#include<string.h>#define MAX 10void stsrt(char * str,int num);void ASC(char * str,int num);void length_add(char * str,int num);void word_length(char * str,int num);int main(void){ char *s[MAX]; int ct=0; int n; puts("输入10个字符串"); while(ct<MAX&&gets(s[ct])&&s[ct][0]!='\0') ct++; puts("选择"); puts("1.输出初始字符串列表;"); puts("2.按ASCⅡ码顺序输出字符串;"); puts("3.按长度递增顺序输出字符串;"); puts("4.按字符串第一个单词长度输出字符串;"); while(scanf("%d",&n)!=5) { switch(n) { case 1:stsrt(s[],ct); break; case 2:ASC(s[],ct); break; case 3:length_add(s[],ct); break; case 4:word_length(s[],ct); break; case 5:quit; default:printf("输入错误"); } } return 0;}void stsrt(char * str,int num) //1.输出初始字符串列表{ int n; for(n=0;n<num;n++) puts(s[num]);}void ASC(char * str,int num) //2.按ASCⅡ码顺序输出字符串{ int top,seek; char *temp; for(top=0;top<num-1;top++) for(seek=top+1;seek<num;seek++) if(strcmp(str[top],str[seek])>0) { temp=str[top]; str[top]=str[seek]; str[seek]=temp; } for(int n=0;n<num;n++) puts(str[n]);}void length_add(char * str,int num) //3.按长度递增顺序输出字符串{ char * temp; int top,seek; for(top=0;top<num-1;top++) for(seek=top+1;seek<num;seek++) if(strlen(str[top])>strlen(str[seek])) { temp=str[top]; str[top]=str[seek]; str[seek]=temp; } for(int n=0;n<num;n++) puts(str[n]);}void word_length(char * str,int num)//4.按字符串第一个单词长度输出字符串.这个函数我觉得可能行不通{ char * temp; int top,seek,n; for(top=0;top<num-1;top++) for(seek=top+1;seek<num;seek++) while(str[top]!=' '&&str[seek]!=' ') if(strlen(str[top])>strlen(str[seek])) { temp=str[top]; str[top]=str[seek]; str[seek]=temp; } for(n=0;n<num;n++) puts(str[n]);}s\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(25) : error C2059: syntax error : ']'D:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(27) : error C2059: syntax error : ']'D:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(29) : error C2059: syntax error : ']'D:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(31) : error C2059: syntax error : ']'D:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(33) : error C2065: 'quit' : undeclared identifierD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(44) : error C2065: 's' : undeclared identifierD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(44) : error C2109: subscript requires array or pointer typeD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(44) : error C2664: 'puts' : cannot convert parameter 1 from 'int' to 'const char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style castD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(54) : error C2664: 'strcmp' : cannot convert parameter 1 from 'char' to 'const char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style castD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(56) : error C2440: '=' : cannot convert from 'char' to 'char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style castD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(58) : error C2440: '=' : cannot convert from 'char *' to 'char' This conversion requires a reinterpret_cast, a C-style cast or function-style castD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(61) : error C2664: 'puts' : cannot convert parameter 1 from 'char' to 'const char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style castD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(70) : error C2664: 'strlen' : cannot convert parameter 1 from 'char' to 'const char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style castD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(70) : error C2664: 'strlen' : cannot convert parameter 1 from 'char' to 'const char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style castD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(72) : error C2440: '=' : cannot convert from 'char' to 'char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style castD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(74) : error C2440: '=' : cannot convert from 'char *' to 'char' This conversion requires a reinterpret_cast, a C-style cast or function-style castD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(77) : error C2664: 'puts' : cannot convert parameter 1 from 'char' to 'const char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style castD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(88) : error C2664: 'strlen' : cannot convert parameter 1 from 'char' to 'const char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style castD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(88) : error C2664: 'strlen' : cannot convert parameter 1 from 'char' to 'const char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style castD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(90) : error C2440: '=' : cannot convert from 'char' to 'char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style castD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(92) : error C2440: '=' : cannot convert from 'char *' to 'char' This conversion requires a reinterpret_cast, a C-style cast or function-style castD:\Program Files\Microsoft Visual Studio\MyProjects\lianxi11_10\1.cpp(95) : error C2664: 'puts' : cannot convert parameter 1 from 'char' to 'const char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast执行 cl.exe 时出错.1.obj - 1 error(s), 0 warning(s)
#include<stdio.h>#include<stdlib.h>#include<string.h>#define ROWS 10#define COLS 80void stsrt(char(*str)[80],int num);void ASC(char(*str)[80],int num);void length_add(char(*str)[80],int num);void word_length(char(*str)[80],int num);void xchg(char* n,char* m);void quit();int main(void){ char s[ROWS][COLS]; int ct = 0; int n = 0; char(*p)[80]; puts("输入10个字符串"); while(ct<ROWS && scanf("%s",&s[ct])){ ct++; } puts("选择"); puts("1.输出初始字符串列表;"); puts("2.按ASCⅡ码顺序输出字符串;"); puts("3.按长度递增顺序输出字符串;"); puts("4.按字符串第一个单词长度输出字符串;"); puts("5.退出;"); while(scanf("%d",&n)){ switch(n){ case 1: p = s; stsrt(p,ct); break; case 2: p = s; ASC(p,ct); break; case 3: p = s; length_add(p,ct); break; case 4: p = s; word_length(p,ct); break; case 5: quit(); default: printf("输入错误"); } } return 0;}void stsrt(char(*str)[80],int num){ //1.输出初始字符串列表 int i; for(i=0;i<num;i++){ printf("%s\n",*str); str++; }} void ASC(char(*str)[80],int num){ //2.按ASCⅡ码顺序输出字符串 int top,seek; for(top=0;top<num-1;top++) for(seek=top+1;seek<num;seek++) if(strcmp(*(str+top),*(str+seek))>0){ xchg(*(str+top),*(str+seek)); } for(int n=0;n<num;n++){ printf("%s\n",*str); str++; }}void length_add(char(*str)[80],int num){ //3.按长度递增顺序输出字符串 int top,seek; for(top=0;top<num-1;top++) for(seek=top+1;seek<num;seek++) if(strlen(*(str+top))>strlen(*(str+seek))){ xchg(*(str+top),*(str+seek)); } for(int n=0;n<num;n++){ printf("%s\n",*str); str++; }}void word_length(char(*str)[80],int num){ //4.按字符串第一个单词长度输出字符串 int top,seek; for(top=0;top<num-1;top++) for(seek=top+1;seek<num;seek++) while(*(str[top])!=' ' && *(str[seek])!=' '){ if(strlen(*(str+top))>strlen(*(str+seek))){ xchg(*(str+top),*(str+seek)); } break; } for(int n=0;n<num;n++){ printf("%s\n",*str); str++; }} void quit(){ exit(0);}void xchg(char* n,char* m){ char* temp; char tmp[80]; temp = tmp; strcpy(temp,n); strcpy(n,m); strcpy(m,temp);}/* 主要还是指针使用的问题,二维数组的确比较头疼...得多看看书 其余功能均可实现,就第四个功能还没有测试,不知道lz用意,是按输出所有与第一个字符串长度相同的串吗?*/