我写了这段代码来反转字符串。它运作良好,但当我输入像“美国美女”这样的短字符串时,它实际上会打印出“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;
}
感谢。
答案 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;
}
并记得在使用后释放返回的指针。到目前为止所有其他答案都是明显错误的:)