这是一个输入一些字符串,然后用 strcmp()比较字符串大小,并按从小到大的顺序输出它们的程序,有截图
#include<stdio.h>#include<string.h>#include<stdlib.h>#defineyibai100intmain(void){cha...
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define yibai 100
int main(void)
{
char**q1=NULL;
char**q2=NULL;
int capalcity=10;
char buf[yibai];
int length=0;
int count=0;
q1=(char**)calloc(capalcity,sizeof(char*));
while(1)
{
if(!fgets(buf,yibai,stdin))
{
printf("error entering");
return 1;
}
if(count=capalcity)
{
capalcity+=10;
q2=(char**)realloc(q1,capalcity);
q1=q2;
}
length=strnlen_s(buf,100)+1;
*(q1+count)=(char*)malloc(length);
strcpy_s(*(q1+count),length,buf);
count++;
if(buf[0]=='\n')
break;
}
int a=count;
char*p1=NULL;
while(count!=1)
{
for(int i=0;i<a-1;i++)
{
if(strcmp(*(q1+i),*(q1+i+1))>0);
{
p1=*(q1+i);
*(q1+i)=*(q1+i+1);
*(q1+i+1)=p1;
}
}
count--;
}
for(int i=0;i<a;i++)
{
printf("\n%s",*(q1+i));
free(*(q1+i));
*(q1+i)=NULL;
}
free(q1);
q1=NULL;
}
求大神告诉我问题处在那?? 展开
#include<string.h>
#include<stdlib.h>
#define yibai 100
int main(void)
{
char**q1=NULL;
char**q2=NULL;
int capalcity=10;
char buf[yibai];
int length=0;
int count=0;
q1=(char**)calloc(capalcity,sizeof(char*));
while(1)
{
if(!fgets(buf,yibai,stdin))
{
printf("error entering");
return 1;
}
if(count=capalcity)
{
capalcity+=10;
q2=(char**)realloc(q1,capalcity);
q1=q2;
}
length=strnlen_s(buf,100)+1;
*(q1+count)=(char*)malloc(length);
strcpy_s(*(q1+count),length,buf);
count++;
if(buf[0]=='\n')
break;
}
int a=count;
char*p1=NULL;
while(count!=1)
{
for(int i=0;i<a-1;i++)
{
if(strcmp(*(q1+i),*(q1+i+1))>0);
{
p1=*(q1+i);
*(q1+i)=*(q1+i+1);
*(q1+i+1)=p1;
}
}
count--;
}
for(int i=0;i<a;i++)
{
printf("\n%s",*(q1+i));
free(*(q1+i));
*(q1+i)=NULL;
}
free(q1);
q1=NULL;
}
求大神告诉我问题处在那?? 展开
展开全部
你结贴好快,我下边用普通的C语言编译器调了一下,但结果不是很理想,应该还有问题,但不会死掉了
#define yibai 100
int main(void)
{
char**q1=NULL;
char**q2=NULL;
int capalcity=10;
char buf[yibai];
int length=0;
int count=0;
q1=(char**)calloc(capalcity,sizeof(char*));
while(1)
{
if(!fgets(buf,yibai,stdin))
{
printf("error entering");
return 1;
}
if(buf[0]=='\n')
break;
if(count==capalcity)
{
capalcity+=10;
q2=(char**)realloc(q1,capalcity);
q1=q2;
}
length=strlen(buf)+1;
*(q1+count)=(char*)malloc(length+1); //-----
strcpy(*(q1+count),buf);
count++;
}
int a=count;
char*p1=NULL;
int i;
while(count!=1)
{
for( i=0;i<a-1;i++)
{
if(strcmp(*(q1+i),*(q1+i+1))>0) //---
{ //--------
p1=*(q1+i);
*(q1+i)=*(q1+i+1);
*(q1+i+1)=p1;
} //------
}
count--;
}
for( i=0;i<a;i++)
{
printf("%s",*(q1+i));
free(*(q1+i));
}
free(q1);
return 0;
} //修改的地方加了注释,请自行研究一下原因,不懂再问
里面strcpy strlen我作了修改,你可以按MS的要求调整一下,我没有环境,不方便调试
追问
呵呵,多谢你的耐心,我已经发现了,是:
if(strcmp(*(q1+i),*(q1+i+1))>0);
{p1=*(q1+i);
*(q1+i)=*(q1+i+1);
*(q1+i+1)=p1;}
这里应该是这样的,我已经改好了,然后就可以运行
追答
祝你进步!good lucky
展开全部
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define yibai 100
int main(void) {
char **q1 = NULL;
char **q2 = NULL;
int capalcity = 10;
char buf[yibai];
int length = 0;
int i,count = 0;
q1 = (char **)calloc(capalcity,sizeof(char *));
while(1) {
if(!fgets(buf,yibai,stdin)) {
printf("error entering\n");
return 1;
}
if(count == capalcity) { // == 还是 =
capalcity += 10;
q2 = (char **)realloc(q1,capalcity);
q1 = q2;
}
length = strlen(buf) + 1;
*(q1 + count) = (char *)malloc(length);
strcpy(*(q1 + count),buf);
count++;
if(buf[0] == '\n') break;
}
int a = count;
char*p1 = NULL;
while(count != 1) {
for(i = 0;i < a - 1;i++) {
if(strcmp(*(q1 + i),*(q1 + i + 1)) > 0) { // ;
p1 = *(q1 + i);
*(q1 + i) = *(q1 + i + 1);
*(q1 + i + 1) = p1;
}
}
count--;
}
for(i = 0;i < a;i++) {
printf("\n%s",*(q1 + i));
free(*(q1 + i));
*(q1 + i) = NULL;
}
free(q1);
q1 = NULL;
return 0;
}
两处低级错误,看有注释的行。
追问
谢谢你,是第二处的错误
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询