访问C中指针引用的数组

时间:2014-02-16 21:42:49

标签: c arrays pointers

我是C语言编程的新手,我正在尝试编写一个比较字符串的简单函数。我来自java,所以如果我犯了一些看似简单的错误,我会道歉。我有以下代码:

/* check if a query string ps (of length k) appears 
     in ts (of length n) as a substring 
     If so, return 1. Else return 0
     */
int
simple_substr_match(const unsigned char *ps,    /* the query string */
                         int k,                     /* the length of the query string */
                         const unsigned char *ts,   /* the document string (Y) */ 
                         int n                      /* the length of the document Y */)
{
    int i;
    for(i = 0;i < n;i+k){
        char comp;
        comp = ts->substring(i,k);
        if (strncmp(comp, ps, k)) {
        return 1;
        }
    }
    return 0;
}

尝试编译时,我得到错误:请求成员'substring',而不是结构或联合。

代码的概念在代码注释中描述,但只是为了详细说明我正在寻找ps是否以k的增量(ps的长度)作为ts的子串出现。

我做错了什么,我该如何解决?有没有更好的方法来做我想做的事情?

4 个答案:

答案 0 :(得分:2)

更改

for(i = 0;i < n;i+k){
    char comp;
    comp = ts->substring(i,k);
    if (strncmp(comp, ps, k)) {
    return 1;
    }
}

for(i = 0;i < n-k;i++){
if (!strncmp(ts+i, ps, k)) {
        return 1;
    }
}

答案 1 :(得分:2)

ts是一个char *而不是一个类(你用C编写,而不是C ++)

如何使用标准的'strstr'C函数?

if (strstr(ts, ps) != NULL) {
  return 1;
} else {
  return 0;
}

答案 2 :(得分:0)

C没有成员函数。并且在c ++中char没有成员函数substring。 你应该使用ts作为字符数组。

答案 3 :(得分:0)

这样的东西?

#define simple_substr_match(ps,ts) (strstr(ts,ps) != NULL)