【問題描述】對分行輸入的若干字串按字典序(由小到大)進行排序并輸出。
【輸入形式】控制臺輸入多行字串,各個字串可能含有空格。
【輸出形式】輸出按字典序(由小到大)進行排序后的字串。
【樣例輸入】
zwtr
fhoenf
hefe
afe geg
【樣例輸出】
afe geg
fhoenf
hefe
zwtr
uj5u.com熱心網友回復:
供參考:#include<stdio.h>
#include<string.h>
int main()
{
char str[1024][64]={0},tmp[64]={0};
int i,j,k;
while(gets(str[i++])!=NULL);//ctrl+z 結束輸入
for(j=0;j<i-1;j++)
for(k=0;k<i-j-1;k++)
if(strcmp(str[k],str[k+1])>0){
strcpy(tmp,str[k]);
strcpy(str[k],str[k+1]);
strcpy(str[k+1],tmp);
}
for(j=0;j<i;j++) puts(str[j]);
return 0;
}
uj5u.com熱心網友回復:
修正樓上第7行,i 初始值int i=0,j,k;
uj5u.com熱心網友回復:
謝謝,但好像運行有點問題
uj5u.com熱心網友回復:
什么樣的問題?uj5u.com熱心網友回復:
程式無法執行,或者發生運行時錯誤
uj5u.com熱心網友回復:
編譯之前,我放在#2樓的修正說明,int i=0;那里你改過了嗎?#include<stdio.h>
//#include<string.h>
int main()
{
char str[1024][64]={0},tmp[64]={0};
int i=0,j,k;
while(gets(str[i++])!=NULL);//ctrl+z 結束輸入
for(j=0;j<i-1;j++)
for(k=0;k<i-j-1;k++)
if(strcmp(str[k],str[k+1])>0){
strcpy(tmp,str[k]);
strcpy(str[k],str[k+1]);
strcpy(str[k+1],tmp);
}
for(j=0;j<i;j++) puts(str[j]);
system("pause");
return 0;
}
//zwtr
//fhoenf
//hefe
//afe geg^Z
//afe geg
//fhoenf
//hefe
//zwtr
//請按任意鍵繼續. . .
uj5u.com熱心網友回復:
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#define MAXLINES 1000
#define BUFSIZE 10000
int readlines(char *[],char buf[],int);
void qsort1(char *[],int,int);
void writelines(char *[],int);
int main()
{
int nlines;
char *lineptr[MAXLINES];
char buf[BUFSIZE];
if ((nlines=readlines(lineptr,buf,MAXLINES))>0){
qsort1(lineptr,0,nlines-1);
writelines(lineptr,nlines);
return 0;
}else{
printf("error");
return 1;
}
}
#define MAXLINE 100
int readlines(char *lineptr[],char v[],int maxlines)
{
int nlines,len;
char line[MAXLINE];
char *p =v;
char *top = v+BUFSIZE;
int getline(char *,int);
nlines =0;
while ((len = getline(line,MAXLINE)) > 0){
if (nlines >= maxlines || (p + len) > top ){
return -1;
}else{
line[len-1] = '\0';
strcpy(p,line);
lineptr[nlines++] = p;
p += len;
}
}
return nlines;
}
int getline(char *s,int imt)
{
int c;
char *t =s;
while (--imt > 0 && (c = getchar()) != EOF && c != '\n')
*s++ = c;
if (c == '\n')
*s++ = c;
*s = '\0';
return s-t;
}
void writelines(char *s[],int n)
{
while (n-- > 0)
printf("%s\n",*s++);
}
void qsort1(char *v[],int left,int right)
{
int lastc,i;
void swap(char *[],int,int);
if (left >= right)
return;
swap(v,left,(left+right)/2);
lastc =left;
for (i = left+1;i<=right;i++)
if (strcmp(v[i],v[left])<0)
swap(v,++lastc,i);
swap(v,lastc,left);
qsort1(v,left,lastc-1);
qsort1(v,lastc+1,right);
}
void swap(char *v[],int i,int j)
{
char *temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/282018.html
標籤:C語言
下一篇:求助sumo大神
