我在CI中写过这样的程序,它每行按行读取一个文件(每行只有一个字),对字母进行排序,然后在每个字符中显示排序字和原始字线。对字符串中的字符进行排序的C程序
#include<stdio.h>
int main()
{
char line[128];
int i=0;
int j;
int length;
while(fgets(line,sizeof line,stdin) != NULL)
{
char word[128];
for (i=0; line[i] != '\0'; i++)
{
word[i]=line[i];
}
while (line[i] != '\0')
i++;
length=i;
for (i=length-1; i >=0; i--)
{
for (j=0; j<i; j++)
{
if (line[j] > line[i])
{
char temp;
temp = line[j];
line[j] = line[i];
line[i]=temp;
}
}
}
printf("%s %s",line,word);
}
return 0;
}
我编译并运行它使用下面的bash命令。
gcc -o sign sign.c
./sign < sample_file | sort > output
原始文件(sample_file)看起来是这样的:
computer
test
file
stack
overflow
输出文件是这样的:
ackst stack
cemoprtu computer
efil file
efloorvw overflow
er
estt test
ter
ter
我有两个问题:
- 输出文件在开始处有一堆换行符(即。abou t 5-7实际文字开始前的空白行)
- 为什么在最后打印'ter'两次?
PS - 我知道这些都是非常基本的问题,但是我只是刚开始使用C/bash进行一个类的工作,而且我不确定哪里出错。
你允许使用'string.h'函数吗?因为使用'strlen'和'strcpy'会更简单。目前,在复制之后,你并不是NUL-teriminating'word'。 – 2010-10-14 02:18:36
我想我可以使用 – xbonez 2010-10-14 02:35:34
这个作业吗?你可能想标记它。如果是这样,可惜你只限于C,它会成为其他几种语言的单行语言。 – Daenyth 2010-10-14 02:41:20