在由K&R编写的ANSI C编程的第69页上,有一个函数的示例,该函数用作Unix程序grep的特殊版本。
代码是:
#include <stdio.h>
#define MAXLINE 1000 //max input length
int getlinee(char line[], int max);
int Strindex(char source[], char searchfor[]);
char pattern[] = "ould";
int main ()
{
char line[MAXLINE];
int found =0;
while (getlinee(line,MAXLINE) > 0)
if (Strindex(line, pattern)>=0){
printf("%s", line);
found ++;
}
return found;
} // end of main function
int getlinee (char s[], int lim)
{
int c,i;
i =0;
while (--lim > 0 && (c=getchar()) != EOF && c!= '\n')
s[i++] =c;
if (c =='\n')
s[i++] =c;
s[i] = '\0' ;
return i;
}
int Strindex (char s[], char t[])
{
int i,j,k;
for (i =0; s[i] != '\0'; i++)
for (i =i, k=0; t[k] != '\0' && s[j] == t[k]; j++, k++);
if (k > 0 && t[k] == '\0')
return i;
}
return -1;
} // end of strindex
当我编译它时,我得到
51:1:error: expected identifier or '(' before 'return'
54:1:error: expected identifier or '(' before '}' token
我检查了代码的次数,但找不到错误。
发布于 2014-04-04 16:33:48
去掉多余的
return -1;
} // end of strindex
还有,你的#include
is empty.You没有使用任何头文件。
发布于 2014-04-04 17:00:15
您的代码中有两个问题。
(i)。第40行:
for (i = i, k = 0; t[k] != '\0' && s[j] == t[k]; j++, k++)
作为Assignment to itself 'i = i'
,编译器可能会为i = i
引发错误
(ii)。第45行:
额外的}
。删除这个。然后尝试构建。我修改了你的代码,它成功地构建了。
#include <stdio.h>
#define MAXLINE 1000 //max input length
int getlinee(char line[], int max);
int Strindex(char source[], char searchfor[]);
char pattern[] = "ould";
int main()
{
char line[MAXLINE];
int found = 0;
while (getlinee(line, MAXLINE) > 0)
if (Strindex(line, pattern) >= 0) {
printf("%s", line);
found++;
}
return found;
} // end of main function
int getlinee(char s[], int lim) {
int c, i;
i = 0;
while (--lim > 0 && (c = getchar()) != EOF && c != '\n')
s[i++] = c;
if (c == '\n')
s[i++] = c;
s[i] = '\0';
return i;
}
int Strindex(char s[], char t[]) {
int i, j, k;
for (i = 0; s[i] != '\0'; i++)
for (i = 1, k = 0; t[k] != '\0' && s[j] == t[k]; j++, k++)
;
if (k > 0 && t[k] == '\0')
return i;
return -1;
} // end of strindex
发布于 2014-04-04 16:42:41
如果我们根据缩进和代码结构来判断,我认为行中缺少左括号:
for (i =0; s[i] != '\0'; i++)
在最后一个函数中。因此,实际的代码行应该如下所示:
for (i =0; s[i] != '\0'; i++) {
last函数中有多个错误。另一个原因是j
没有初始化。正如我可以得出的结论,该函数应该搜索字符串中的子字符串的索引。第一个循环通过字符串s
。第二个循环通过第二个字符串并比较两个字符串。如果比较到达第二个字符串的末尾,则返回found index,否则函数退出,索引为-1
。
https://stackoverflow.com/questions/22857482
复制相似问题