2017-01-10 26 views
1

スタック構造を使用して文字列を反転する際に問題があります。スタックを使用した文字列の逆転

私は答え(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

Cの文字列の最後に2進数のゼロが必要であるという事実を一時的に無視し、さまざまなストックコード(この場合は 'printf')がいつ印刷を停止するかを知るようにしました。 – usr2564301

+3

'sizeof'で文字列の長さを取得することはできません!このマクロは '(char *)'の長さを4(または8)に返します。あなたの 'reverse'関数で' strlen'関数を使用してください。 –

+0

@HamidRezaMehrabian:よく目撃された!したがって、最初の8文字(私はちょうど推測している)の文字は 'sizeof'から来て、9番目の文字は文字列を終了しないからです。 – usr2564301

答えて

2

文字列終了文字'\0'を考慮していません。 printfで%sを使って刺しゅうを印刷しています。

スタックの巻き戻し後にrstringが計算されたら、'\0'をrstringに追加する必要があります。うまくいけば、これはあなたの問題を解決します。

+0

私はプッシュ( '\ 0')を挿入しました。他の要素を押す前に私は自分の問題を解決しました。ありがとうございます。 – timedeveloper

1

sizeofを使用すると、data_typeサイズ(この場合はchar *のサイズ)がバイト単位で取得されます。代わりにstrlenを使用してください。

+0

あなたはまったく正しいですが、問題を解決しません – timedeveloper

+0

ランダムな "奇妙なキャラクター"か、まったく同じキャラクターですか? – dpw

関連する問題