当前位置:编程学习 > C/C++ >>

C语言问题求解!!!!

 在主函数中输入10个等长的字符串。用另外一函数对他们进行排序(采用字符的升序或降序)。然后在主函数输出这10个已经排好序的字符串(不允许采用函数)

 

帮我看下是哪里错了,该怎么改,谢谢了;

 

/*************
顺序为:升序;
*************/
#include"stdio.h"
#include "string.h"
void main()
{
 int mystrcmp(char *str1, char *str2);
 char a[10][80],*c;
 int i,j;
 for(i=0;i<10;i++)
 {
  gets(a[i]);
 }
 for(j=0;j<9;j++)
 {
  for(i=0;i<9-j;i++)
  {
   if(mystrcmp(a[i+1],a[i])<0)
   {
    strcpy(c,a[i]);
    strcpy(a[i],a[i+1]);
    strcpy(a[i+1],c);
   }
        
  }
  printf("\n");
 }


}
int mystrcmp(char *str1, char *str2)
{
char *p, *q;


p = str1;
q = str2;
while((*p == *q) && *p && *q) {
p++; q++;
}


return (*p - *q);
}

答案:编译时,编译器的警告说指针c未初始化,测试了一下,段错误,能引起段错误的也就是那个指针c了。
指针只是用于保存地址,你的这几段代码:
strcpy(c,a[i]);
strcpy(a[i],a[i+1]);
strcpy(a[i+1],c);
是在交换a[i]字符串和a[i+1]字符串的内容吗?
明显会出错,指针c没有初始值,它保存的地址是随机的,你用strcpy(c,a[i]);,把a[j]中的数据拷贝到随机地址的内存空间里,这不是乱放吗?指针c所指向的内存空间不属于你的程序,你的程序没权限往这内存空间写东西,所以,报错,程序终止。
除非,你申请一段内存空间,用指针c保存这个内存空间的地址,那就可以。


不明白你是如何想的,你的要求是:
1,在主函数中输入10个等长的字符串。
2,用另外一函数对他们进行排序(采用字符的升序或降序)。还有个要求:不允许采用函数,这是什么意思?是不允许采样系统自带的函数,还是不允许采样自定义函数,还是不允许采用任何函数?
第一个要求是满足了,可第二个呢?唯一一个“另外一函数” 是mystrcmp()函数,可它的功能不是“对他们进行排序”。
按我的理解,第二个要求,是写个自定义函数,对字符串中的字符进行排序。而你这代码,貌似是对比两个字符串,不一样就交换位置,只是 “不一样”,没有谁大谁小,这这么排序。


至于main函数的位置,我个人认为main函数写最底下,其它函数写上面,这样,省得main函数要调用函数时,再声明一次函数。

代码已重写,下面是代码:
#include <stdio.h>
#include <string.h>
/* 功能:将字符串中的字符进行升序排序 */
void sort(char *str)
{
    int i, j;
    char temp;
    //以下是最容易想到的算法,高级的算法懒得想了
    for(i=0; str[i] != 0; i++)
    {//遍历字符串
        for(j=i+1; str[j] != 0; j++)
        {
            if(str[i] > str[j])
            {//如果第 i 个字符的大于它后面的第 j 个字符,就交换位置
                temp = str[i];
                str[i] = str[j];
                str[j] = temp;
            }
        }
    }
}


#define N 10
int main()

    char a[10][80];
    int i;
    //输入N个字符串
    for(i=0;i<N;i++) 
        scanf("%s",a[i]); 
    
    for(i=0;i<N;i++) 
    {//将N个字符串进行排序,并输出显示
        sort(a[i]); 
        printf("%s\n", a[i]); 
    }
    
    return 0;
}

上一个:C语言怎么学
下一个:c语言教程

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,