gpt4 book ai didi

c++ - 使用指针时表达式必须具有类类型

转载 作者:太空狗 更新时间:2023-10-29 20:20:07 32 4
gpt4 key购买 nike

我试图在 string1 中计算 string2 存在的次数。例如:string1 = abababd。字符串 2 = ab。结果:3.

(这道题一定要用指针)

我目前拥有的:

int mystr(char* s, char* t) {
int counter = 0;
int length = strlen(t);
while (*s != '\0')
{
char d[] = *s.substr(0, 2);
if (*s == *t)
counter++;
*s += length;
}
return counter;
}

我不断收到问题:此行的表达式必须具有类类型:char d[] = *s.substr(0, 2);有人可以帮忙吗?

最佳答案

substr是类 std::string 的一个方法.

您在此处使用 C 指针 (char* s),因此没有要调用的 substr(),因此出现错误。


当然,我会把实现留给你,但你可以从 create my own substr 中得到启发。 .


由于 OP 表现出诚意尝试做他们自己的硬件,让我们评论一下目前的方法:

int mystr(char* s, char* t) {
int counter = 0;
int length = strlen(t);
// while we haven't reach the end of string
while (*s != '\0')
{
// this is not used anywhere, and it's wrong. Why 2? You want the length of `t` there, if you would use it anyway
char d[] = *s.substr(0, 2);

// this is wrong. It will increase the counter,
// every time a character of the substring is matched with the
// current character in the string
if (*s == *t)
counter++;

// you want to read the next chunk of the string, seems good for a start
*s += length;
}
return counter;
}

那么现在,您应该关注如何检查当前子字符串是否在字符串中匹配。所以,你需要改变这个:

if (*s == *t)
counter++;

将检查 t 的所有字符,相对于字符串中相同数量的字符,从当前位置开始。因此,您需要迭代 *s。多少次? t 的长度。

在该迭代中,您需要检查字符串 s 的当前字符是否与字符串 t 的当前字符比较相等>。当迭代结束时,如果在该迭代期间访问的所有字符都相同,则意味着您找到了匹配项!所以,如果这是真的,那么我们应该增加计数器。


奖励:如果您有时间,并且已经完成了上面讨论的逻辑,请考虑 *s += length; 和这个输入:`s = "dabababd", t = "ab”。

关于c++ - 使用指针时表达式必须具有类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53739191/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com