我尝试编写在某些字符串中搜索字符串的函数。 〔实施例: “qwerty”=>搜索的关键 “qasazqertyqwerty” 程序返回1,因为在字符串中找到了qwerty。
我的代码功能是:
int normal(char *str, char *str2)
{
int temp=0;
while(*str)
{
while(*str2)
{
if(*str == *str2)
{
temp+=1;
}
else if(temp == strlen(str2))
{
printf("%d", temp/strlen(str2));
}
str2++;
str++;
}
}
return 0;
}
程序中的问题到底是什么(逻辑上)?
答案 0 :(得分:2)
正确答案显然是使用strtstr
。但是,如果您仍然想知道为什么您的代码不起作用,那是因为您正在递增strlen
str2
。您应该首先在函数的开头计算它,然后在比较chararcters时将temp
与它进行比较。
答案 1 :(得分:1)
是的,你应该使用strstr()。但要解释为什么你的功能不起作用:
答案 2 :(得分:0)
这是我在某些时候写过的strstr()的一个版本,它应该与MISRA-C兼容,保存为最终的强制转换,这与C标准的strstr()定义兼容。 _
前缀用于表示这些不是string.h中的库函数。
uint8* _strstr (const uint8* s1, const uint8* s2)
{
uint16 length;
const uint8* return_val;
length = _strlen(s2);
if(length == 0)
{
return_val = s1;
}
else
{
sint16 n;
n = (sint16) _strlen(s1) + (sint16) 1 - (sint16) length;
return_val = NULL;
if(n >= 1)
{
while(n != 0)
{
n--;
if(*s1 == *s2)
{
if(_memcmp(s1, s2, length) == 0)
{
return_val = (uint8*) s1;
}
}
s1++;
}
}
}
return (uint8*)return_val;
}