c - 为什么它重复源字符串的最后四个字符
问题描述
该代码应该删除除空格和字母之外的任何字符,并将大写字母转换为小写字母。我的问题是为什么目标字符串会重复源字符串的最后四个字符。
代码
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);
}
原文:
敏捷的棕狐跳过了懒狗和!##!懒狗还在睡觉
修改后的文字:
敏捷的棕狐跳过懒狗,而懒狗还在睡觉
解决方案
您在 i 是字符串的 < strlen 的条件下循环,因此您永远不会看到空终止符,因此不要将其复制到结果中的正确位置。
您可以将条件更改为 <= 并且我敢打赌它会起作用。
推荐阅读
- javascript - 我是 React 新手,有人能告诉我为什么会这样吗?
- sql - 检查 2 个表的差异,使用编程语言或纯 SQL
- flutter - 为元素存储两种不同颜色并在主题更改时同时更改的最佳方法?
- powershell - 使用 Powershell 重命名远程 FTP 上的文件
- c# - 存储库模式中的类映射错误
- amazon-web-services - AWS Cognito 用户使用未发送 SMS MFA 验证码登录
- macos - 即使同一行上有可用空间,CTFramesetterSuggestFrameSizeWithConstraints 也会换行
- ios - 无法安装 Cocoapods
- quickbase - 有没有办法在 Quickbase 的堆积条形图中显示数字和百分比?
- python - 什么是pymunkoptions?