如何通过for循环将用户输入字符串反向存入数组并输出?
字符串反转程序的问题修正与实现
原代码的核心问题
- 关键字错误:
Int需改为小写的int,C语言对关键字大小写敏感。 - 反转逻辑错误:循环中误用
scanf读取输入到str1,正确做法是直接从原字符串str中取字符赋值。 - 索引处理错误:
strlen(str)返回字符串长度,比如"abc"长度为3,字符索引是0-2,若从i = strlen(str)开始遍历,会访问到字符串结束符'\0',导致反转后的字符串开头就是结束符,无法正常输出。 - 缺少字符串结束符:反转完成后未给
str1添加'\0',printf("%s")会读取内存垃圾数据。
修正后的实现(额外数组版)
#include <stdio.h> #include <string.h> int main() { char str[100], str1[100]; int len, i, j = 0; printf("Input string: "); // 处理输入前可能残留的换行符,避免空读取 getchar(); scanf("%[^\n]", str); len = strlen(str); // 从原字符串最后一个有效字符开始遍历赋值 for(i = len - 1; i >= 0; i--) { str1[j++] = str[i]; } // 必须添加字符串结束符,保证输出正常 str1[j] = '\0'; printf("Reversed string: %s\n", str1); return 0; }
更高效的原地反转版(无需额外数组)
如果不想占用额外数组空间,可以直接在原字符串上交换首尾字符完成反转:
#include <stdio.h> #include <string.h> int main() { char str[100]; int len, i; char temp; printf("Input string: "); getchar(); scanf("%[^\n]", str); len = strlen(str); // 交换首尾对应位置的字符,循环到字符串中间即可 for(i = 0; i < len / 2; i++) { temp = str[i]; str[i] = str[len - 1 - i]; str[len - 1 - i] = temp; } printf("Reversed string: %s\n", str); return 0; }
内容的提问来源于stack exchange,提问作者Kendal
相关产品推荐
相关产品推荐

