2014-11-02 104 views
-1

我必须在C中编写一个程序,它从标准输入读取输入并在屏幕上按字母顺序写入字符串顺序。你能帮我么?C-按字母顺序从标准输入排序数组

下面是程序:

#include <stdio.h> 
#include <string.h> 

int main (int argc, char *argv[]) 
{ 

    char tabela[100][50]; 
    int i=0; 
    int j,k; 
    char string[50]; 
    char temp[50]; 
    while(fgets(string,sizeof(string), stdin) != NULL) 
    {j=0;  
     while(j<strlen(string)){ 
    tabela[i][j]=string[j++]; 
     } 
     i++; 
    } 
    for(j=0; j < i ; j++){ 
     for(k=j+1; k< i; k++) 
     { 
      if(strcmp(tabela[j],tabela[k]) > 0) 
      { 
       strcpy(temp,tabela[j]); 
       strcpy(tabela[j],tabela[j]); 
       strcpy(tabela[k],temp); 
      } 
     } 
    } 

    for (j = 0; j <i; j++){ 
     printf("%s\n", tabela[j]); 
    } 
    // sort(tabela,i); 
    /* for(k = 0; k <=i;k++){ 
    printf("\n"); 
    for(j = 0; j <=i;j++) { 
     printf("%c", tabela[j][k]); 
    } //for */ 
    /* 
}//for */ 
    return 0; 
}//main 

由于

回答

1

一个机会是,通过选择排序来运行:

/* selection sort */ 
void sort(char **a, int n) { 
    int min, i, j; 
    char t[50]; 

    for (i = 0; i < n; i++) 
    { 
     min = i; 
     for (j = i+1; j < n; j++) 
     { 
      if (strcmp(a[j],a[min]) < 0) min = j; 
     } 

     strcpy(t,a[min]); 
     strcpy(a[min],a[i]); 
     strcpy(a[i],t); 
    } 
} 
1

C/C++提供了一种用于在STDLIB排序的库。 h叫做“qsort”(快速排序)here

如果你需要一个例子le:

基本上,您需要首先包含必需的库“stdlib.h”和“string.h”,然后您需要定义一个比较函数。

int cmp(const void* a, const void* b) 
{ 
    int arg0 = *(char*) a, arg1 = *(char*)b; 
    return arg0-arg1; 
} 

假设你有长度的字符数组100

char example[100] = "adfasdfasdfsdasdfasdfafhtyjytjukvr"; 

然后调用函数的qsort这样的:

qsort(example,strlen(example),sizeof(char),cmp); 

你去那里:)

或者,在C++中,还有另一种内置的排序功能std::sort()std::stable_sort()可以在标题<algorithm>中找到,它不仅可以用于char数组,还可以用于其他C++容器。你可以这样调用它:

std::sort(example,example+strlen(example)); 

延伸阅读:

C++ containers

C++ sort

C++ stable sort

1

我想这是在写作练习排序的代码,所以(以避免为你做功课)我会坚持一般的建议,基于排序练习和实际情况我已经写了。

在控制台输入期间对插入排序进行排序以进行插入排序 - 也就是说,排序是在列表输入时完成的,因此对于每个条目按ENTER后“非常短的时间”完全排序(理想情况下,用户不能在下一个输入提示出现之前告诉任何事情)。使用大型列表元素进行排序可能非常耗时,因此通常使用标签排序(在对标签进行排序而不是实际列表元素的情况下),但不太可能从手动输入中获得该级别的元素大小。一个很长的列表可能会给出类似的问题(取决于搜索算法的效率),但同样,这是一个受入口方法限制的问题。

由于列表限制(通过数组声明)为100个不超过50个字符长的元素,如果您需要使用简单的直通测试和批量下移元素,用户永远不会注意到延迟在新元素之后(在现代计算机上,即使在解释语言中,插入后的排序步骤也不会超过几毫秒的执行时间),但是(假设你正在学习一些稍后将用于较大程序的东西和数据集),使用二叉树搜索和链表更有效率;如果您只需查看其中的一小部分,并且永不需要移动它们中的任何一个,但只能在标记数组中移动整数,那么您可以获得每千字节长度的数千个元素的列表的插入时间。