在C中有没有一种方法可以在没有string.h的文本文件中查找单词的出现?

推荐答案1

是.

已经有一些好的答案.由于这是我第三杯咖啡的星期天早晨,而且我仍然懒得写代码,所以我不会.

这是一个解决问题.您真的不需要重新发明轮子,您的新车轮也不是比现有的轮子更顺利地旋转.如果不巧妙地计划缓存和读取文件,本机Homespun C代码不太可能与系统库或系统工具的性能相匹配.

取决于您正在使用的系统,在Linux上,最简单的方法就是通过系统调用从C代码中调用" GREP".请咨询" Man Grep",以了解哪些确切的参数将起作用.在Windows"查找"上可以做类似的事情.

如果您必须编写自己的代码,则更优化的版本将使用KMP算法:
<跨度> Knuth–Morris–Pratt algorithm - Wikipedia

但是,嘿,首先使它起作用,然后,如果需要,请使其更快.
对于原型,我首先要选择风管 - 录像带选项.

推荐答案2

确保有

  1. int wordMatches(char* word1,char* word2, int length){ 
  2. int i; 
  3. for(i=0;i<length;i++){ 
  4. if(*(word1+i) != *(word2+i)){ 
  5. return 0; 
  6. } 
  7. i } 
  8. return 1; 
  9. } 
  10.  
  11. int countOccurences{char* word,int wordLength,char* text, int textLength}{ 
  12. int counter=0; 
  13. for(int i=0;i<textLenght-wordLength;i++){ 
  14. counter+=wordMatches(word,text+i,wordLength) 
  15. } 
  16. return counter; 
  17. } 

推荐答案3

由于C是一种图灵完整的语言,因此答案绝对是. C0> 不使用String.h:

  1. #include <stdlib.h> 
  2.  
  3. const char *mystrstr(const char *s, const char *t) { 
  4.  
  5. // returns pointer to first occurrence of string t in s, 
  6. // or NULL if not found. 
  7.  
  8. int i; 
  9.  
  10. for (; *s; s++) { 
  11. for (i = 0; s[i] && t[i] && s[i] == t[i]; i++); 
  12. if (t[i] == 0) { 
  13. return s; 
  14. } 
  15. } 
  16. return NULL; 
  17. } 

推荐答案4

除了Ken Gregg的出色答案外,当您编译时,请修复 first 错误或警告,然后再次编译.仅仅剩下一个半隆就可能会导致一系列完全无关的错误,因为如果编译器"失去了位置",它就会开始抛出各种不存在的错误.因此,修复第一个,重新编译,再次修复第一个.

推荐答案5

我会在" C中的文本文件"上以不同的方式解释您的问题 - 当我阅读时,我理解它意味着文本文件是您要修改的C代码.

您可以使用' sed '.

sed是一种古老的旧unix组件,但是在GNU的持续护理和喂养的情况下,它仍然是一种强大而有用的工具.

<

您说该行有一个特定的字符串 - 我会假设"特定"您的意思是它是唯一的,仅在文件中发生一次(或同样有效的假设,您想删除与字符串匹配的每一行)

如果您的C代码在Sourcecode.c中问题的目的是该解决方案是在C中编码的...嗯,它很简单 - c可以用来催生命令行作为子过程,因此,如果您解释了我的答案,我的答案仍然可以保持问题意味着该解决方案应写在C中 - 只需构建正确的" SED"命令行,并将其作为子过程运行. : - )