在字符串中查找字符串
问题描述:
我试图编写在某个字符串中搜索字符串的函数。 exmaple: “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;
}
到底在程序(逻辑)的问题?
答
正确的答案显然是使用strtstr
。但是,如果您仍然想知道为什么您的代码无法正常工作,那是因为您在str2
上致电strlen
,您正在增加该代码。你应该先在函数的开头计算它,然后比较temp
与它完成比较chararcters。
答
是的,你应该使用strstr()。但要解释为什么你的功能不起作用:
- 你的函数总是返回0,因为总是只有一个返回语句。
- 如果str小于str2,则会发生segfault,因为您在内部循环中转发了两个指针。
- 条件温度== strlen的(STR2)将永远不会被达到,因为温度的增量和str2的长度递减
答
这里是一个版本的的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;
}
而我想,它不工作......这就是为什么你问这个问题吗? – ALOToverflow 2011-05-17 13:58:33
这功课呢? – 2011-05-17 14:00:04
它是功课吗?如果不是,请改用strstr。 http://linux.die.net/man/3/strstr – shinkou 2011-05-17 14:00:09