【发布时间】:2020-01-27 21:42:49
【问题描述】:
对于我的程序,我必须给出文件的字数和行数。我知道他们使用 if 语句是一种更简单的方法,但我需要使用 strtock。 它目前给了我一个正确的字数,但我的行数一直是错误的。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int wordcount(char *string);
int linecount(char *string);
int main(){
char * buffer=0;
long length;
char filename[50];
printf("Enter file name: \n");
scanf("%s",filename);
FILE *f= fopen(filename, "rb");
if(f){
fseek(f,0,SEEK_END);
length=ftell(f);
fseek(f,0,SEEK_SET);
buffer=malloc(length);
if (buffer){
fread(buffer,1,length,f);
}
fclose(f);
}
if(buffer){
printf("wordcount: %i\n", wordcount(buffer));
printf("linecount: %i\n", linecount(buffer));
}
return (EXIT_SUCCESS);
}
int wordcount(char *string){
int count=0;
for(string=strtok(string," =.!,;\n");string; string=strtok(NULL, " -.!,;\n"))
count++;
return count;
}
int linecount(char *string){
int count=1;
for(string=strtok(string,"\n");string; string=strtok(NULL, "\n"))
count++;
return count;
}
我知道我在我的 strtok 中遗漏了一些不算数的东西,但我不确定它是什么。 非常感谢任何帮助。
【问题讨论】:
-
如果
bufferfromfread(buffer,1,length,f);是"abc\nXYZ",你会把它算作 1 行还是 2 行? -
buffer=malloc(length);应该是buffer=malloc(length+1); buffer[length]=0;以便稍后用作 字符串。
标签: c