推荐答案1
是.
已经有一些好的答案.由于这是我第三杯咖啡的星期天早晨,而且我仍然懒得写代码,所以我不会.
这是一个解决问题.您真的不需要重新发明轮子,您的新车轮也不是比现有的轮子更顺利地旋转.如果不巧妙地计划缓存和读取文件,本机Homespun C代码不太可能与系统库或系统工具的性能相匹配.
取决于您正在使用的系统,在Linux上,最简单的方法就是通过系统调用从C代码中调用" GREP".请咨询" Man Grep",以了解哪些确切的参数将起作用.在Windows"查找"上可以做类似的事情.
如果您必须编写自己的代码,则更优化的版本将使用KMP算法:
<跨度> Knuth–Morris–Pratt algorithm - Wikipedia
但是,嘿,首先使它起作用,然后,如果需要,请使其更快.
对于原型,我首先要选择风管 - 录像带选项.
推荐答案2
确保有
- int wordMatches(char* word1,char* word2, int length){
- int i;
- for(i=0;i<length;i++){
- if(*(word1+i) != *(word2+i)){
- return 0;
- }
- i }
- return 1;
- }
- int countOccurences{char* word,int wordLength,char* text, int textLength}{
- int counter=0;
- for(int i=0;i<textLenght-wordLength;i++){
- counter+=wordMatches(word,text+i,wordLength)
- }
- return counter;
- }
推荐答案3
由于C是一种图灵完整的语言,因此答案绝对是. C0> 不使用String.h:
- #include <stdlib.h>
- const char *mystrstr(const char *s, const char *t) {
- // returns pointer to first occurrence of string t in s,
- // or NULL if not found.
- int i;
- for (; *s; s++) {
- for (i = 0; s[i] && t[i] && s[i] == t[i]; i++);
- if (t[i] == 0) {
- return s;
- }
- }
- return NULL;
- }
推荐答案4
除了Ken Gregg的出色答案外,当您编译时,请修复 first 错误或警告,然后再次编译.仅仅剩下一个半隆就可能会导致一系列完全无关的错误,因为如果编译器"失去了位置",它就会开始抛出各种不存在的错误.因此,修复第一个,重新编译,再次修复第一个. 我会在" C中的文本文件"上以不同的方式解释您的问题 - 当我阅读时,我理解它意味着文本文件是您要修改的C代码. 您可以使用' sed '. sed是一种古老的旧unix组件,但是在GNU的持续护理和喂养的情况下,它仍然是一种强大而有用的工具. < 您说该行有一个特定的字符串 - 我会假设"特定"您的意思是它是唯一的,仅在文件中发生一次(或同样有效的假设,您想删除与字符串匹配的每一行) 如果您的C代码在Sourcecode.c中问题的目的是该解决方案是在C中编码的...嗯,它很简单 - c可以用来催生命令行作为子过程,因此,如果您解释了我的答案,我的答案仍然可以保持问题意味着该解决方案应写在C中 - 只需构建正确的" SED"命令行,并将其作为子过程运行. : - ) 推荐答案5