首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

选择实现字符串的各种功能解决方法

2012-06-01 
选择实现字符串的各种功能第一次编写那么长的程序。。虽然简单。。写完了后人都晕了。。麻烦看看下面的错误咋个

选择实现字符串的各种功能
第一次编写那么长的程序。。虽然简单。。写完了后人都晕了。。麻烦看看下面的错误咋个纠正啊?
或者哪些地方写的不好,也请说一下。。谢谢!


C/C++ code
#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]);}

C/C++ code
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) 



[解决办法]
C/C++ code
#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用意,是按输出所有与第一个字符串长度相同的串吗?*/ 

热点排行