I need some help with a program that I am writing for my Systems Programming class. It is in C and I have very, very little experience with C. I need to merge three text file with the format:
我需要一些帮助,我正在为我的系统编程课程编写一个程序。它在C中,我对C的经验非常非常少。我需要将三个文本文件合并为以下格式:
word1
word2
word3
...
wordX
I am also to bring each of the words from all three files and put them into a 2D array (an array of string-arrays), then use some sort of sorting method on them.
我还要将所有三个文件中的每个单词都放入一个2D数组(一个字符串数组的数组)中,然后对它们使用某种排序方法。
I shouldn't need help with the sorting, but I don't know how to get the word count from each of the text files or put them into an array.
我不需要帮助排序,但我不知道如何从每个文本文件中获取字数或将它们放入数组中。
This is the function I have for counting the words in the file. It doesn't compile on gcc (probably for obvious reasons, but I don't know them). Do I even have the right idea?
这是我用来计算文件中单词的函数。它不能在gcc上编译(可能原因很明显,但我不知道)。我甚至有正确的想法吗?
int countWords(FILE f){
int count = 0;
char ch;
while ((ch = fgetc(f)) != EOF){
if (ch == '\n')
count++;
//return count; originally here, but shouldn't be.
}
return count;
}
EDIT: I supposed I could just find a way to count the lines in the program, but I'm not sure if the approach would be any different from what I am trying to do here. (I have never really been that good at working with text files.
编辑:我想我可以找到一种方法来计算程序中的行数,但我不确定这种方法是否会与我在这里尝试的方法有所不同。 (我从来没有真正善于处理文本文件。
Holy cow. I got it to count all of the lines in the program. I guess I'm a little rusty :P
天啊。我得到它来计算程序中的所有行。我想我有点生气:P
#include <stdlib.h>
#include <stdio.h>
int countWords(FILE *f){
int count = 0;
char ch;
while ((ch = fgetc(f)) != EOF){
if (ch == '\n')
count++;
}
return count;
}
int main(void){
int wordCount = 0;
FILE *rFile = fopen("american0.txt", "r");
wordCount += countWords(rFile);
printf("%d", wordCount);
return 0;
}
I kind of forgot about that the pointer thing with FILE *fileName
我有点忘了FILE * fileName指针的东西
Thanks for the help guys.
谢谢你的帮助。
3 个解决方案
#1
2
The type you use for a file in c is FILE*
. That star is important, indicating that the type is a "pointer to FILE". It is unlikely that countWords(FILE f)
is what you meant to write.
您在c中用于文件的类型是FILE *。那颗星很重要,表明该类型是“指向文件的指针”。 countWords(FILE f)不太可能是你想写的。
Each time you call your function, it will have a fresh count = 0
, so it will always return 0 or 1. Try using static int count;
, making count a global variable, or passing in the current count to the function. Your other option is to move the return count;
line outside of the while
loop.
每次调用函数时,它都会有一个新的count = 0,因此它将始终返回0或1.尝试使用static int count;,使count成为一个全局变量,或者将当前计数传递给函数。您的另一个选择是移动返回计数;在while循环之外的行。
You will also probably need to divide the count by two to get the number of words, using the format you posted.
您可能还需要将计数除以2以使用您发布的格式获取单词数。
#2
2
It should be int countWords(FILE *f){
, with *
. And the return
statement should go before the last }
only, outside the loop.
它应该是int countWords(FILE * f){,带*。并且return语句应该在循环之外的最后一个}之前。
#3
0
Here is the code. Just read the number of spaces, that it.
这是代码。只需读取空格数即可。
#include<stdio.h>
#define FILE_READ "file.txt"
int main()
{
FILE * filp;
int count = 1;
char c;
filp = fopen(FILE_READ, "r");
if(filp == NULL)
printf("file not found\n");
while((c = fgetc(filp)) != EOF) {
if(c == ' ')
count++;
}
printf("worrds = %d\n", count);
return 0;
}
text file
I am megharaj, from india.
output,
worrds = 5
#1
2
The type you use for a file in c is FILE*
. That star is important, indicating that the type is a "pointer to FILE". It is unlikely that countWords(FILE f)
is what you meant to write.
您在c中用于文件的类型是FILE *。那颗星很重要,表明该类型是“指向文件的指针”。 countWords(FILE f)不太可能是你想写的。
Each time you call your function, it will have a fresh count = 0
, so it will always return 0 or 1. Try using static int count;
, making count a global variable, or passing in the current count to the function. Your other option is to move the return count;
line outside of the while
loop.
每次调用函数时,它都会有一个新的count = 0,因此它将始终返回0或1.尝试使用static int count;,使count成为一个全局变量,或者将当前计数传递给函数。您的另一个选择是移动返回计数;在while循环之外的行。
You will also probably need to divide the count by two to get the number of words, using the format you posted.
您可能还需要将计数除以2以使用您发布的格式获取单词数。
#2
2
It should be int countWords(FILE *f){
, with *
. And the return
statement should go before the last }
only, outside the loop.
它应该是int countWords(FILE * f){,带*。并且return语句应该在循环之外的最后一个}之前。
#3
0
Here is the code. Just read the number of spaces, that it.
这是代码。只需读取空格数即可。
#include<stdio.h>
#define FILE_READ "file.txt"
int main()
{
FILE * filp;
int count = 1;
char c;
filp = fopen(FILE_READ, "r");
if(filp == NULL)
printf("file not found\n");
while((c = fgetc(filp)) != EOF) {
if(c == ' ')
count++;
}
printf("worrds = %d\n", count);
return 0;
}
text file
I am megharaj, from india.
output,
worrds = 5