【发布时间】:2010-10-14 13:10:38
【问题描述】:
我用 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
我有两个问题:
- 输出文件的开头有一堆换行符(即在实际文本开始之前大约有 5-7 个空白行)
- 为什么最后会打印两次“ter”?
PS - 我知道这些都是非常基本的问题,但我才刚刚开始使用 C / bash 上课,我不确定我哪里出错了。
【问题讨论】:
-
你可以使用
string.h函数吗?因为使用strlen和strcpy会更简单。目前,您不会在复制后以 NUL 终止word。 -
我想我可以使用它
-
这是作业吗?您可能想要标记它。如果是这样,很遗憾您仅限于 C,它会是其他几种语言的单行代码。
-
是的。如果是 C# 或 C++,那就轻而易举了。
-
为什么这个标签是
bash?
标签: c