Euler 22 /按字母顺序排序名称

时间:2014-09-20 23:35:54

标签: c string sorting copy

我一直试图从欧拉#22问题中对这些名字进行排序。我尝试了很多方法来交换字符串。我每次都有问题。在某些情况下,有随机符号;在其他人中,我在交换时溢出了(?)名称(比如在尝试交换PATRICIA和LINDA时最终使用LINDACIA)。我试图在字符串中添加每个空闲字节的符号(如LINDAzzzzzzzzz \ 0),并且编译错误。

输入文件

"MARY","PATRICIA","LINDA","BARBARA","ELIZABETH","JENNIFER","MARIA","SUSAN","MARGARET"

源代码

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

int main()
{
    char *nameorder;
    char liste[5164][15];
    char hold[15];
    int i=0,j=0,k;
    int c;
    FILE *ptr;
    nameorder ="names.txt";
    ptr= fopen( nameorder , "r");
    if(ptr==0)
    {
        printf("File could not be opened");
        return 0;
    }
    while( (c=getc(ptr)) != EOF) //reading character by character
    {
        if(c=='"')
        {
            continue;
        }
        if(c==',')
        {
            j=0;
            i++;
            continue;
        }
        liste[i][j]=c;
        j++;
    }
    fclose(ptr);
    for(k=0;k<5163;k++)
    {
        for(i=0;i<5164;i++) //
        {
            if( strcmp(liste[i],liste[i+1])>0 )
            {
                strncpy(hold,liste[i],15);
                strncpy(liste[i],liste[i+1],15);
                strncpy(liste[i+1],hold,15);
            }
            else
                continue;
        }
    }

1 个答案:

答案 0 :(得分:0)

至少,你不会null终止你的字符串。这对于所有不完全是15个字符的名称都很重要。

解决此问题的最简单方法是将整个数组初始化为零。

char liste[5164][15] = {{0}};