我有使用堆棧結構反轉字符串的問題。使用堆棧反轉字符串
我做了一些代碼,以扭轉「蘋果」到「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),但它也印了一些其他字符是什麼我沒有打算。爲什麼我得到這個東西?它可能與內存數組有關,但不知道內存發生了什麼。如何解決這個問題?
您暫時忽略了C字符串最後需要二進制零的情況,以便各種庫存代碼(本例中爲'printf')知道何時停止打印。 – usr2564301
你不能通過'sizeof'獲得字符串長度!這個宏的返回長度是((char *))是4(或8)。在'reverse'函數中使用'strlen'函數。 –
@HamidRezaMehrabian:很好看!所以前8個(我只是猜測)字符來自'sizeof',而第9個來自不終止字符串。 – usr2564301