我一直试图从欧拉#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;
}
}
答案 0 :(得分:0)
至少,你不会null终止你的字符串。这对于所有不完全是15个字符的名称都很重要。
解决此问题的最简单方法是将整个数组初始化为零。
char liste[5164][15] = {{0}};