繁体   English   中英

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

[英]Calculating number of a specific substring from a string in C

我有一个字符串,我把从一个相当大(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 中选择 matrix、trivial、bigbash ...一次一个单词?

这里有一个算法给你:

  1. 有一个当前的指针。 将其初始化为指向字符串的开头。
  2. 从当前指针搜索第一个行尾字符。
  3. 如果你跑到绳子的末端,停下来,你就完成了。
  4. 将行尾字符转换为零字节。
  5. 处理从当前指针开始的字符串。
  6. 将当前指针设置为指向您用零字节替换的行尾字符。
  7. 恢复当前指针处的行尾字符,以免损坏字符串(除非您不在乎)。
  8. 不断增加当前指针,直到它指向除行尾字符以外的其他内容。 如果您遇到零字节,请停止,您就完成了。
  9. 转到步骤 2。

您的文件每行包含一个单词。 您读取整个文件,然后尝试通过换行符来打破结果字符串。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM