继续打印文件中最长的10个单词(每行一个单词)。单词可以按任何顺序打印,如果有多个单词并列第10个最长,我们可以决定该怎么做。以下打印前1,欣赏任何建议循环可以迭代和打印下一个9的建议。假设在这里,文件中最长的单词可以是200个字母和60个空格的黑白。我想要排除这两个假设并使其更加动态地工作。虽然以下是C喜欢听到任何用C ++写的但是需要避免使用STL。
pip install git+https://github.com/ericmjl/autograd.git@cupy
答案 0 :(得分:0)
您没有明确说明,但我会根据您的示例代码假设该文件是每行一个字。
首先,这个任务是一个相当简单的单行内容。
awk '{print length($0), $0}' words.txt | sort -rn | head | awk '{print $2}'
编写代码会比编写自己的程序更快更强大。管道打印每个以其长度和空格为前缀的单词,以相反的顺序对结果行进行数字排序,取前10行,然后打印不带长度的单词。
假设你确实需要写C,这里有一些建议:
答案 1 :(得分:0)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_WORD_LENGTH 200
int main () {
FILE *fp = fopen("words.txt","r");
char str[60];
char *largest = (char*) malloc (MAX_WORD_LENGTH);
int smallest_len = MAX_WORD_LENGTH, largest_len = 0;
int len_temp = MAX_WORD_LENGTH; // new added code
for (int cnt = 1; cnt <= 10; cnt ++) // new added code
{
while (fgets (str, 60, fp) != NULL)
{
char *temp = strtok(str, "\n");
while (temp != NULL)
{
if (strlen(temp) > largest_len && strlen(temp) < len_temp)
{ // here len_temp is for remember the last biggest one length
strcpy(largest, temp);
largest_len = strlen(largest);
}
temp = strtok(NULL, "\n");
}
}
// new added code
printf("The %dst word in the file is: %s\n, length is %d", cnt, largest, largest_len);
len_temp = largest_len; // remember last largest length
rewind(fp); // new added code
largest_len = 0; // new added code
}
fclose(fp);
return 0;
}