【问题标题】:C Find all instances of a wordC 查找一个单词的所有实例
【发布时间】:2012-10-08 00:46:14
【问题描述】:

所以我正在尝试使用这部分代码查找单词的所有实例

fseek(src, 0, SEEK_END);
int size = ftell(src); 
fseek(src, 0, SEEK_SET);
int line = 0;
int i = 0;
char ch = ' ';
char *word;
char lastch = 'x';
int j = 0;
int lines[getLines(src)];

for(i = 0; i < getLines(src); i++){
    lines[i] = -1;
}

for(i = 0; i < size; i++){
    ch = fgetc(src);
    printf("%s %c", word, '\n');
    if(!isspace(lastch) && isspace(ch)){

        if(strcmp(word, find) == 0){
            if(lines[j - 1] != line){
                lines[j] = line;
                j++;
            }
        }
    }else{

        if(isspace(lastch) && isspace(ch)){
            continue;
        }else if(isspace(lastch) && !isspace(ch)){
            word = "";
            append(word, ch);
        }else if(!isspace(lastch) && !isspace(ch)){
            append(word, ch);
        }
    }
    lastch = ch;
}

append() 在哪里

char *append(const char *s, char c) {
int len = strlen(s);
char buf[len+2];
strcpy(buf, s);
buf[len] = c;
buf[len + 1] = 0;
return strdup(buf);
}

谁能向我解释为什么 String 单词没有添加任何字符?

我很确定这与附加功能有关,谢谢。

【问题讨论】:

  • 所以,你的问题不是关于“查找一个单词的所有实例”,而是为什么你的函数 append() 不起作用,对吧?
  • 您真的应该阅读 C 教程! (并培养一些常识。)在我们都告诉过你 cca 之后。在此之前 5 分钟,您无法就地修改常量字符串,您期望给出上一个问题的答案的函数可以做到这一点。您甚至还没有努力了解您正在使用的功能是如何工作的。它不修改字符串本身,而是返回附加到它的指定字符的字符串的副本。
  • 显然,如果您要查找某个单词的所有实例,那么您的问题是您没有在 Internet 上进行爬网。
  • 对不起,我正在参加考试,刚刚意识到我只需要做 word = append(word, ch);我的错。我有点着急,真的没时间。我懂编程,还有 C,剩下 20 分钟就很难保持头脑清醒。

标签: c string char append


【解决方案1】:

所以在阅读了我的评论后,也阅读了我的回答:

word = "";
append(word, ch);

没有做你认为它做的事。它不会将字符附加到word 本身,而是将字符附加到word 的可写副本。你真的应该写

} else if(isspace(lastch) && !isspace(ch)) {
    word = append("", ch);
} else if(!isspace(lastch) && !isspace(ch)) {
    char *tmp = append(word, ch);
    free(word);
    word = tmp;
}

相反。另外,请正确使用空格和缩进,您的代码很难阅读。

【讨论】:

    猜你喜欢
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    相关资源
    最近更新 更多