• 締切済み

C言語について

質問です!例えば"1234"の文字が送られてきたら その文字を、4→A[0]、3→A[1]、2→A[2]、1→A[3] のように後ろから、配列に格納していきたいのですが どうしたらいいのかわかりません。言語はCです。 宜しくお願いします。

みんなの回答

回答No.5

コードの断片を書きます。(参考程度) char str[128]; char temp[128]; int stringlen; fgets(temp, 128, stdin); if (temp[strlen(temp) - 1] == '\n') { /* 常識的な文字数で入力された場合 */ temp[stringlen = (strlen(temp) - 1)] = '\0'; } else { /* 127文字以上入力された場合 */ stringlen = strlen(temp); } for (count = 0; count < stringlen; count++) { str[count] = temp[stringlen - 1 - count]; } str[stringlen] = '\0'; printf("%s", str);

回答No.4

 これって直ぐ思い付くのがスタックです。また、情報系ならスタックは必須ですから、出題され易い問題でもありますよね。 #include <stdio.h> #include <string.h> #define SIZE 256 #define SUCCESS 0 #define FAILURE -1 int stk_num; int push(int, int *); int pop(int *, int *); int main(void) { int stack[SIZE], c; char buff[SIZE], *temp; printf("Input data: "); fgets(buff, SIZE, stdin); buff[strlen(buff) - 1] = '\0'; /* スタックに積む */ temp = buff; while (*temp != '\0') push(*temp++, stack); /* スタックから取り出し、配列に格納する */ temp = buff; while (pop(&c, stack) == SUCCESS) *temp++ = c; /* 操作後の出力 */ printf("%s\n", buff); return 0; } int push(int data, int stack[]) { if (stk_num < SIZE) { stack[stk_num++] = data; return SUCCESS; } else return FAILURE; } int pop(int *data, int stack[]) { if (stk_num > 0) { *data = stack[--stk_num]; return SUCCESS; } else return FAILURE; }

参考URL:
http://www.cc.kyoto-su.ac.jp/~yamada/ap/stack.html
eva2027
質問者

お礼

親切に本当にありがとうございます! 細かいプログラムで本当に助かります!

回答No.3

関数にするならこんな感じでいいと思う。 #include <stdio.h> #include <malloc.h> #include <string.h> /* 関数 */ /* 入力の文字列を、逆にして出力の文字列に返す */ void reverce(char *in, char *out, int len) { int i; for(i=0; i<len; ++i) // 前から1個ずつ入れていく out[i] = in[len-i-1]; // 後ろから1個ずつとって、前に入れる } /* メイン */ int main(int argc, char *argv[]) { // コマンド引数 int length; char *cp; if(argc <= 1) return 1; length = strlen(argv[1]); // コマンド引数の1番目(ASCII文字)の長さ cp = (char*)malloc(length); // 結果の文字列を格納するメモリーの確保 if(!cp) return 2; reverce(argv[1], cp, length); puts(cp); // 逆に入れた文字を画面に表示する free(cp); // 確保したメモリーを解放 return 0; }

eva2027
質問者

お礼

とても丁寧でわかりやすかったです! 本当にありがとうございました!!

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

Googleで「逆文字列」「C言語」を検索する。 かなり具体的なものがヒットするはず。

eva2027
質問者

お礼

確かにヒットしました! ありがとうございます!

回答No.1

一度中間バッファに蓄え、総データ長がわかった後に最終的なバッファに前後を逆転して入れなおす。

eva2027
質問者

お礼

参考になりました! ありがとうございます!

関連するQ&A