当我扭转我的弦时,我得到了2号

时间:2012-09-26 04:53:18

标签: c++ string

我写了这段代码来反转字符串。它运作良好,但当我输入像“美国美女”这样的短字符串时,它实际上会打印出“ytuaeb nacirema2”。这是我的代码。我想知道我的代码在字符串末尾打印一个随机2有什么问题。感谢

// This program prompts the user to enter a string and displays it backwards.

#include <iostream>
#include <cstdlib>
using namespace std;

void printBackwards(char *strPtr); // Function prototype

int main() {
    const int SIZE = 50;
    char userString[SIZE];
    char *strPtr;
    cout << "Please enter a string (up to 49 characters)";
    cin.getline(userString, SIZE);
    printBackwards(userString);

}

//**************************************************************
// Definition of printBackwards. This function receives a      *
// pointer to character and inverts the order of the characters*
// within it.                                                  *
//**************************************************************

void printBackwards(char *strPtr) {
    const int SIZE = 50;
    int length = 0;
    char stringInverted[SIZE];
    int count = 0;
    char *strPtr1 = 0;
    int stringSize;
    int i = 0;
    int sum = 0;

    while (*strPtr != '\0') {
        strPtr++; // Set the pointer at the end of the string.
        sum++; // Add to sum.
    }
    strPtr--;

    // Save the contents of strPtr on stringInverted on inverted order
    while (count < sum) {
        stringInverted[count] = *strPtr;
        strPtr--;
        count++;
    }
    // Add '\0' at the end of stringSize
    stringInverted[count] == '\0';

    cout << stringInverted << endl;
}

感谢。

3 个答案:

答案 0 :(得分:4)

你的空终止是错误的。您使用==代替=。你需要改变:

stringInverted[count] == '\0';

stringInverted[count] = '\0';

答案 1 :(得分:1)

// Add '\0' at the end of stringSize
stringInverted[count] == '\0';

此处应使用=

答案 2 :(得分:1)

您的代码有什么问题,您甚至不使用strlen来计算字符串的长度,而是使用固定大小的字符串(没有malloc,或者,gasp [])或者std :: string(这个是C ++)!即使在普通的C中,不使用strlen总是错误的,因为它是针对处理器进行手动优化的。最糟糕的是,你已经从堆栈帧中分配了要返回的字符串(stringInverted),这意味着当函数退出时,指针无效,并且代码“工作”的任何时候都是完全偶然的。

要在c ++上反转字符串,请执行以下操作:

#include <iostream>
#include <string>

int main() {
    std::string s = "asdfasdf";
    std::string reversed (s.rbegin(), s.rend());
    std::cout << reversed << std::endl;
}

要在C99中反转字符串,请执行以下操作:

char *reverse(const char *string) {
    int length = strlen(string);
    char *rv = (char*)malloc(length + 1);
    char *end = rv + length;
    *end-- = 0;
    for ( ; end >= rv; end --, string ++) {
        *end = *string;
    }
    return rv;
}

并记得在使用后释放返回的指针。到目前为止所有其他答案都是明显错误的:)