从C中的字符串计算特定子字符串的数量

时间:2018-11-15 03:18:25

标签: c string

我有一个字符串,我将从一个很大的(500MB)文本文件中读取的所有字符放入其中。下面提供了我如何读取.txt文件的信息。

    long fsize(FILE *fp) {
    fseek(fp, 0, SEEK_END);
    long bytes = ftell(fp);
    rewind(fp);
    return bytes;
}
char *filecontent='\0';
FILE *fp;
fp=fopen(file.txt,"r");
long size = fsize(fp);
fcontent = malloc(size);
fread(fcontent, 1, size, fp);     

`

fcontent 指向的字符串应采用以下格式:

matrix
trivial
bigbash
tropical
swalloed
.
.
.

现在,我需要计算 fcontent 中子字符串“ ba”的出现次数。由于文本文件中的每一行都包含一个单词,并且子字符串搜索应仅限于该单词,因此,我该如何只从 fcontent 中一次选择矩阵,琐碎,bigbash ...一次选择一个单词>?

2 个答案:

答案 0 :(得分:0)

这是为您准备的算法:

  1. 具有当前指针。初始化它以指向字符串的开头。
  2. 从当前指针中搜索行首字符。
  3. 如果您从字符串末尾开始运行,请停止,操作完成。
  4. 将行尾字符转换为零字节。
  5. 处理从当前指针开始的字符串。
  6. 将当前指针设置为指向要替换为零字节的行尾。
  7. 在当前指针处恢复行尾字符,以免损坏字符串(除非您不在乎)。
  8. 继续增加当前指针,直到它指向行尾字符以外的其他位置。如果您命中了零字节,请停下来。
  9. 转到步骤2。

答案 1 :(得分:0)

您的文件每行包含一个单词。您在其中读取了整个文件,然后尝试通过换行符将结果字符串断开。

简单得多的过程是使用getline()逐行读取文件。

然后使用strstr在每个单词中搜索您的子字符串。

http://www.cplusplus.com/reference/string/string/getline/?kw=getline
http://www.cplusplus.com/reference/cstring/strstr/