【发布时间】:2021-02-06 18:06:12
【问题描述】:
我正在尝试从“C 编程”一书中的练习中创建一个函数。正确的函数应该指示一行是否包含某个单词,如果是 - 返回它在该行中的第一个字符位置(单词的)。
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int substring (char a[], char b[]);
int main ()
{
char line1[15], line2[15];
printf("Print first one\n");
int i = 0;
char character;
do
{
character = getchar ();
line1[i] = character;
i++;
}
while (character != '\n');
line1[i-1] = '\0';
printf ("Print the second one\n");
scanf("%s", line2);
printf("%s, %s\n", line1, line2); \\ for checking lines
int index;
index = substring (line1, line2);
printf("The result is: %i\n", index);
}
int substring (char a[], char b[])\*function to determine if a line contains a word, if yes then return its polition, else return -3*\
{
int len1 = strlen(a), len2 = strlen(b);
int current1 = 0, current2 = 0;
bool found = false;
int result;
while( current1 < len1 )
{
if (a[current1] == b[current2])
{
if(!found)
{
result = current1+1;
}
else
found = true;
while ((a[current1] == b[current2]) && (a[current1] != '\0') && (b[current2] != '\0'))
{
current1++;
if(current2+1 == len2)
return result;
current2++;
}
current1 = result;
}
else
{
current2 = 0;
found = false;
current1++;
}
}
return -3;
}
问题出在第二个函数(子字符串)中,因为当我尝试在“Here is your word”行中搜索“word”时,功能正常工作,但是当我尝试在一行中搜索“word”时“这是你的 wwwwword”,函数返回 -3(这表明是否出现问题)。
【问题讨论】:
-
getchar返回int,而不是char。你需要检查它是否返回EOF,所以你不能使用较小的整数类型。 -
听起来你有一个错误。如果不仔细查看您的代码,我猜您匹配
w,然后将w与o不匹配,然后您认为您正在寻找w,但实际上您应该是寻找o。也就是说,您没有正确重置搜索。 IOW,而不是current2 = 0,在某些情况下,您可能需要检查您是否真的想要current2 = 1。 -
请注意,如果您正在寻找像
abcabcd这样的字符串并且输入了abcabcabcd,这会变得更加复杂,在这种情况下,您需要将该指针重置为 4 而不是 0。跨度>
标签: c search substring c-strings function-definition