以下のプログラムで、スタックに文字をpush-downする関数 void push(char c, char *s, int *top); を作りたいのですが・・・。
・作成した関数pushが正しく動作しpush-downの動作の前と後、それぞれの内容をprint_stack_ary関数を用いて確認するプログラムを書きたいのですが、関数の中身をどう書けばいいのかを教えてください。
#include <stdio.h>
#define MAX 30
void print_stack_ary(char* s, int top);
void push(char c, char *s, int *top);
int main(void) {
char s[MAX] = "abcd";
print_stack_ary(s, 4);
return 0;
}
void print_stack_ary(char* s, int top) {
if(top==4)
printf("<---TOP=%d\n",top);
printf("%c\n", s[--top]);
if (top > 0) {
print_stack_ary(s, top);
}
}
void push(char c, char *s, int *top);
{
}
No.2ベストアンサー
- 回答日時:
こんな感じですかね。
最初に、<--TOP=xx と印字してますが、それを実現するために
static int deep = 0;を定義しています。(感心したことではありませんが・・・)
------------------------------------
#include <stdio.h>
#define MAX 30
void print_stack_ary(char* s, int top);
void push(char c, char *s, int *top);
int main(void) {
int top = 0;
char s[MAX] = "";
print_stack_ary(s,top);
push('a',s,&top);
push('b',s,&top);
push('c',s,&top);
print_stack_ary(s,top);
push('d',s,&top);
push('e',s,&top);
print_stack_ary(s,top);
return 0;
}
void print_stack_ary(char* s, int top) {
static int deep = 0;
if(deep == 0)
printf("<---TOP=%d\n",top);
if(top <= 0) return;
printf("%c\n", s[--top]);
if (top > 0) {
deep++;
print_stack_ary(s, top);
}
if (top <= 0) deep = 0;
}
void push(char c, char *s, int *top)
{
if (*top >= MAX) return;
s[*top] = c;
(*top)++;
}
--------------------------------------
以下、実行結果です。
<---TOP=0
<---TOP=3
c
b
a
<---TOP=5
e
d
c
b
a
ーーーーーーーーーーーーーーーーーー
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
干支のプログラム
-
TCP/IP通信型大文字・小文字変...
-
c++ 文字列を入力して、一文字...
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
Visual Studio strcpyについて
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
int main()の・・・
-
double型の値をchar配列に変換...
-
switch文で文字を比較すること...
-
DPマッチング
-
int型からchar型への変換
-
文字列から空白を取り除きたい...
-
バイナリファイルをコピーする...
-
c言語でユーザ関数を利用して入...
-
C言語のポインターで詰まっている
-
C++ の FileCopy の設定が解り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報