首页 > 解决方案 > 为什么它重复源字符串的最后四个字符

问题描述

该代码应该删除除空格和字母之外的任何字符,并将大写字母转换为小写字母。我的问题是为什么目标字符串会重复源字符串的最后四个字符。

代码

void convertlower(char myString[]) {
  int i = 0, j = 0;
  for (i = 0; i < strlen(myString); i++) {
    if (myString[i] == '\0') {
      myString[j] = '\0';
      break;
    }

    if ((myString[i] >= 'A' && myString[i] <= 'Z') ||
        (myString[i] >= 'a' && myString[i] <= 'z') ||
        (myString[i] == ' ')) {
      if (myString[i] >= 'A' && myString[i] <= 'Z') {
        myString[j] = myString[i] + 32;
        j++;
      } else {
        myString[j] = myString[i];
        j++;
      }
    }
  }
}

int main() {
  char myString[] =
      "The quick Brown Fox jumps over the Lazy Dog and the !##! LAZY DOG is "
      "still sleeping";
  printf("Original Text:\n%s\n", myString);
  convertlower(myString);
  printf("Modified Text:\n%s\n", myString);
}

原文:

敏捷的棕狐跳过了懒狗和!##!懒狗还在睡觉

修改后的文字:

敏捷的棕狐跳过懒狗,而懒狗还在睡觉

标签: cstringrepeat

解决方案


您在 i 是字符串的 < strlen 的条件下循环,因此您永远不会看到空终止符,因此不要将其复制到结果中的正确位置。

您可以将条件更改为 <= 并且我敢打赌它会起作用。


推荐阅读