2
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.

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

谢谢!

4

2 回答 2

1

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

如果你发现不匹配,或者在任何地方都到达了字符串的末尾,除了匹配子字符串的最后一个字符,那么你返回 false。否则,您返回 true。

于 2012-10-24T04:14:51.743 回答
0

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

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;
}
于 2012-10-24T14:35:46.710 回答