c - Euler 22/按字母顺序对名称进行排序

标签 c string sorting copy

我一直在尝试对 Euler #22 问题中的这些名称进行排序。我尝试了很多方法来交换字符串。我每次都有问题。有些是随机的符号;有些是随机的。在其他情况下,我在交换时出现了溢出(?)的名字(就像在尝试交换 PATRICIA 和 LINDA 时最终得到了 LINDACIA 一样)。我尝试在字符串中的每个空闲字节中添加一个符号(例如 LINDAzzzzzzzzzz\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;
        }
    }

最佳答案

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

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

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

关于c - Euler 22/按字母顺序对名称进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25954290/

相关文章:

c - SIGCHLD 导致段错误,未进入处理程序

c - c中的输入输出函数

javascript - 将属性添加到字符串

c# - 如何在 C# 中可视化 MySQL 查询字符串

javascript - 使用 ng-repeat Angularjs 进行排序

c - c语言中如何初始化局部变量?

python - 使用Python直接向USB发送信号

c++ - 从 .txt 中读取带有空格的整行文本到单个变量 C++

mysql - 数据库排序的时间复杂度

java - 按名称对已排序的 LinkedList 进行排序