我编写了一个反转数组的简单程序。例如,字符串' hello'将打印出来作为' olleh'。然而,当我输入类似' hello'之类的东西时,它打印出一半字符串反转,然后是一些神秘的字符和其他不应该存在的废话。
我的源代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char str[100], temp;
int i = 0, j = 0;
printf("Enter a string:\n");
fgets(str, 100, stdin);
// scanf("%s", &str);
j = strlen(str) - 1;
while (i < j) {
temp = str[i];
str[i] = str[j];
str[j] = str[temp];
i++;
j--;
}
printf("The reversed string is: %s", str);
return (0);
}
我得到的一些输出是&#39; oll&#39;然后是一个里面有四个数字的小方块。这可能会有所不同,有时印刷&#39; olx&#39;或者&#39; olH&#39;甚至&#39; ol&#39;带有钻石形状的问号。为什么我的程序不能正常工作?数组是否已包含其他一些编码信息?
答案 0 :(得分:3)
让我们仔细看看这两行:
temp = str[i];
...
str[j] = str[temp];
首先,您将temp
设置为str[i]
中的字符。另一个使用temp
作为索引到str
。但是temp
不是一个索引,而是一个角色。所以最后一行应该是
str[j] = temp;
答案 1 :(得分:1)
你的算法很好。你只需要替换
str[j] = str[temp];
通过
str[j] = temp;