- 締切済み
C言語について
質問です!例えば"1234"の文字が送られてきたら その文字を、4→A[0]、3→A[1]、2→A[2]、1→A[3] のように後ろから、配列に格納していきたいのですが どうしたらいいのかわかりません。言語はCです。 宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- johnsmith_
- ベストアンサー率34% (8/23)
コードの断片を書きます。(参考程度) 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);
- 和泉 博(@hiroshi09s)
- ベストアンサー率54% (59/109)
これって直ぐ思い付くのがスタックです。また、情報系ならスタックは必須ですから、出題され易い問題でもありますよね。 #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; }
- n2201makita
- ベストアンサー率30% (8/26)
関数にするならこんな感じでいいと思う。 #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; }
お礼
とても丁寧でわかりやすかったです! 本当にありがとうございました!!
- nda23
- ベストアンサー率54% (777/1415)
Googleで「逆文字列」「C言語」を検索する。 かなり具体的なものがヒットするはず。
お礼
確かにヒットしました! ありがとうございます!
- SnowShower
- ベストアンサー率40% (140/348)
一度中間バッファに蓄え、総データ長がわかった後に最終的なバッファに前後を逆転して入れなおす。
お礼
参考になりました! ありがとうございます!
お礼
親切に本当にありがとうございます! 細かいプログラムで本当に助かります!