我在使用堆栈结构反转字符串时遇到问题。
我制作了一些代码来反转苹果'到了'elppa'并且看起来效果很好......
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 5
typedef int element;
element stack[MAX_STACK_SIZE];
int top = -1;
void initialize() {
top = -1;
}
int isEmpty() {
return (top == -1);
}
int isFull() {
return (top == (MAX_STACK_SIZE - 1));
}
void push(element item) {
if (isFull()) {
printf("stack is full, cannot add element.\n");
}
else{
stack[++top] = item;
}
}
element pop() {
if (isEmpty()) {
printf("stack is empty\n");
}
else {
return stack[top--];
}
}
char* reverse(char* s) {
const int len = sizeof(s) + 1;
char* rstring = new char[len];
initialize();
for (int i = 0; i < len; i++) {
push(s[i]);
}
int tmp = 0;
while(isEmpty()==false){
rstring[tmp++]=pop();
}
for (int i = 0; i < len; i++) {
printf("%c\n", rstring[i]);
}
return rstring;
}
void main() {
char* str1 = "apple";
char* str2 = reverse(str1);
printf("before : %s \n", str1);
printf("after : %s \n", str2);
getchar();
}
the result is here我得到了答案(elppa),但它也打印出了一些我不打算的其他角色。为什么我得到这个东西?它可能与内存数组或其他东西有关,但不确切知道发生了什么内存。如何解决问题?
答案 0 :(得分:2)
您尚未考虑字符串终止字符'\0'
。您正在使用带有printf的%s打印sting。
在展开堆栈后计算了rstring后,您应该将'\0'
附加到rstring。希望这能解决您的问题。
答案 1 :(得分:1)
通过使用sizeof
,您将获得data_type大小(在本例中为char *的大小),以字节为单位。您应该使用strlen
代替。