C++ 使用指针遍历检查字符串是否重复

C++ 使用指针遍历检查字符串是否重复,c++,pointers,C++,Pointers,使用指针遍历实现此函数时遇到问题。我在想,我可以从s中提取前n个字符,然后将其与s进行比较,但我不确定如何做到这一点。如果我一次遍历一个字符,我如何检查它是否匹配一个文本块,例如s的前n个字符 谢谢 实际上一次只能比较一个字符,因此可以从s和s+n开始比较一个字符。如果匹配,则将s+1处的字符与s+n+1处的字符进行比较。如果它们匹配,请转到s+2,依此类推,直到n。如果它们匹配到该点,则从s+n*2开始重复,然后是s+n*3,以此类推,直到到达字符串的末尾 如果您发现不匹配,或者在除子字符串的

使用指针遍历实现此函数时遇到问题。我在想,我可以从s中提取前n个字符,然后将其与s进行比较,但我不确定如何做到这一点。如果我一次遍历一个字符,我如何检查它是否匹配一个文本块,例如s的前n个字符


谢谢

实际上一次只能比较一个字符,因此可以从
s
s+n
开始比较一个字符。如果匹配,则将
s+1
处的字符与
s+n+1
处的字符进行比较。如果它们匹配,请转到
s+2
,依此类推,直到
n
。如果它们匹配到该点,则从s+n*2开始重复,然后是s+n*3,以此类推,直到到达字符串的末尾

如果您发现不匹配,或者在除子字符串的最后一个字符之外的任何位置到达字符串末尾,则返回false。否则,返回true。

替代方法(不完全由指针遍历):

bool repeatOfFirstChars(int n,const char*s)
{
len=strlen(s);
如果(len%n!=0)返回false;
对于(int step=1;step
如果我们有“HelloHelloHelloHelloHelloHello”5怎么办?那么,hello被重复了不止一次?@BobJohn:至少根据你所说的,这是不相关的——如果至少有一个匹配项,你只需要返回true,对吗?如果是这样的话,字符串后面可能会有更多匹配项这一事实就无关紧要了。我想你误解了。子字符串必须在整个字符串中完全重复。所以,在我给出的例子中,如果最后一个“o”改为“t”,函数应该返回false。是的,我确实误解了。编辑答案。
bool repeat_char(char *s, int n);
//R: s is a C-string of at least n non-NUL characters and n > 0
//E: returns true if the first n characters are fully repeated throughout the string s, false
//   otherwise.
bool repeatOfFirstChars(int n, const char *s)
{
  len = strlen(s);

  if (len % n != 0) return false;

  for (int step = 1; step < len / n; step++) {
    if (0 != strncmp(s, s+n*step, n)) return false;
  }

  return true;
}