我有一个任务来计算char字符串中子字符串的出现次数。我写这段代码,但在某些输入输出是错误的。像字符串是“hassana”而sub是“as”然后它输出2 ...某个plz帮助我
int CharString :: countOccurenceOf(const char* substr)
{
int count = 0;
bool find = false;
for(int i = 0; i < size1; i++)
{
if(cstr[i] == substr[0])
{
int x = i;
int c = 1;
find = true;
while ( substr[c] != '\0' && find == true && (x+1) < size1)
{
if(cstr [x+1] != substr[c])
{
find = false;
}
c++;
x++;
}
if (find == true)
{
count++;
i = i + c-1;
}
}
}
return count;
}
得到一些解决方案.....是吗?
int CharString :: countOccurenceOf(const char* substr)
{
int len = 0;
if ( substr != '\0')
{
while( substr[len] != '\0')
len++;
}
int count = 0;
bool find = false;
for(int i = 0; i < size1; i++)
{
if(cstr[i] == substr[0])
{
int x = i;
int c = 1;
find = true;
while ( substr[c] != '\0' && find == true && (x+1) < size1)
{
if(cstr [x+1] != substr[c])
{
find = false;
}
c++;
x++;
}
if (find == true && c == len)
{
count++;
i = i + c-1;
}
}
}
return count;
}
答案 0 :(得分:1)
假设cstr是你的类内部字符串:
int CharString :: countOccurenceOf(const char* substr)
{
int occurrencies = 0;
unsigned char* s = cstr;
while (s) {
if (strstr(s,substr)) { occurrencies++; s+= strlen(substr); }
else s++;
}
return occurrencies;
}
答案 1 :(得分:1)
问题是,如果x + 1&lt;尺寸1。如果子字符串的第一个字符与主字符串的最后一个字符匹配,那么这将自动中断并且&#34;找到&#34;仍然会设置为true,因此您将匹配增加1.有许多方法可以更改代码来解决此问题;希望你现在能找到一个你知道问题的原因。