用指针反转字符串

时间:2015-11-03 13:30:55

标签: c++ pointers

我试图编写一个简单的程序,它将使用指针反转用户输入。这是我第一次使用指针,理论上我的程序似乎可以工作:有一个数组,将用户输入写入数组,指向头部的一个指针,另一个指向结尾,并使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

4 个答案:

答案 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;作为一个角色。