我试图编写一个简单的程序,它将使用指针反转用户输入。这是我第一次使用指针,理论上我的程序似乎可以工作:有一个数组,将用户输入写入数组,指向头部的一个指针,另一个指向结尾,并使while循环执行休息。但是,我的程序没有正常工作。我的问题是,我究竟做错了什么?
继承我的代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
char user_input[1000] = " ";
cout << "Enter a word to be reversed: " << endl;
cin >> user_input;
int myChar = sizeof(user_input) - 1;
char *start = user_input;
char *end = user_input + myChar - 1;
while (start < end) {
char save = *start;
*start = *end;
*end = save;
start++;
end--;
}
cout << user_input;
}
And my output:
Enter a word to be reversed:
hello <--- my input
<--- no output
答案 0 :(得分:5)
该行
int myChar = sizeof(user_input) - 1;
应该是
#include <string.h>
int myChar = strlen(user_input);
目前,您正在撤消阵列中的所有1000个字符。输入字符串末尾之外的字符未初始化,因此您只应反转用户输入的字符数。 strlen()
找到你的长度。
另一种选择:使用标准库。
答案 1 :(得分:3)
sizeof(user_input)
始终为1000,因为user_input
是一个包含1000个1字节元素的数组。
您需要使用strlen
代替。它返回终止空字符的索引。
答案 2 :(得分:2)
将user_input声明为 char * user_input = new char [1000]
所以问题是什么?
问题是当你在user_input中从用户那里获取输入时,它将其视为user_input [0] 所以要么从0到n-1运行for循环,要么使用上面给出的方式 而且输出仍然是错误的,我将离开你...
答案 3 :(得分:0)
您也可以自己编写strlen函数 用户输入的结尾将是第一个0的索引作为int或&#39; \ 0&#39;作为一个角色。