スタック構造を使用して文字列を反転する際に問題があります。スタックを使用した文字列の逆転
私は答え(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の文字列の最後に2進数のゼロが必要であるという事実を一時的に無視し、さまざまなストックコード(この場合は 'printf')がいつ印刷を停止するかを知るようにしました。 – usr2564301
'sizeof'で文字列の長さを取得することはできません!このマクロは '(char *)'の長さを4(または8)に返します。あなたの 'reverse'関数で' strlen'関数を使用してください。 –
@HamidRezaMehrabian:よく目撃された!したがって、最初の8文字(私はちょうど推測している)の文字は 'sizeof'から来て、9番目の文字は文字列を終了しないからです。 – usr2564301