- ベストアンサー
C言語の課題で困っています
- C言語の課題で困っています。キーボードから最大80文字の文字列を入力し、入力した文字列とその逆順を表示するプログラムを作成したいです。
- 課題内容は、キーボードから最大80文字の文字列を入力し、その文字列とその逆順を表示するプログラムを作成することです。C言語での実装方法について教えてください。
- C言語の課題で困っています。キーボードから入力される最大80文字の文字列と、その文字列の逆順を表示するプログラムを作成したいです。具体的な実装方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
良いヒントですね。 足りないところ、間違っているところ取り混ぜてのヒントなので、この添削は勉強になると思います。 ヒントに沿って作れば、下記のようになるのでしょう。 これでできたというのではなく。 元のヒントと比べて検討しましょう。最期だけ???にしておきました。 #include <stdio.h> #include <stdlib.h> void main(void){ char *buf; //入力文字列用 char *seq; //入力文字列用コピー用 char *rev; //逆順文字列用 int len, i; buf =(char*)malloc(81); printf("文字列を入力:"); scanf("%s",buf ); for(i = 0; buf[i] != '\0'; i++){ } len = i; /* lenに文字列の長さが入る */ seq = (char*)malloc(len + 1); /* len+1文字文確保*/ for(i = 0; i<=len; i++){ seq[i] = buf[i]; } free(buf); rev = (char*)malloc(len + 1); for(i = 0; i< len; i++){ rev[len - i - 1] = seq[i]; } rev[i] = '\0'; printf("入力文字列 : %s\n",???);/*ヒントでは'sep'ですがそれではないですね。逆文字列の出力です。自分で考えて!*/ }
その他の回答 (4)
- nora1962
- ベストアンサー率60% (431/717)
・#invlude→スペルミス ・//入力文字列用コピー用→bufに入力済みなので不要 ・Ien = i; /* lenに文字列の長さが入る */ →スペルミス、後strlen使わないの? ・rey = ???(len + 1); →スペルミス ・ren[i] ~ '\0'; →「~」はビット排他的論理和(XOR) ・printd("入力文字列 : %s\n",sep);→スペルミス 自分がやるなら S="ABCDEFGH\x0" という文字列があったらstrlenは8 配列先の領域を「8+1」分確保。 Sの最後尾文字「H」の配列位置はS[7] これをコピー先のV[0]に持っていく。 後は、Hの配列インデックスを-1しながら、 配列先Vのインデックスを+1させる。 配列元のインデックスが0以下になったら終了。 配列先のV[8]に\x0を代入する。
- okormazd
- ベストアンサー率50% (1224/2412)
#3です。 seqとrevを解放するの忘れてました。 free(seq); free(rev);
お礼
回答ありがとうございます、助かりました;
- 4610_931
- ベストアンサー率29% (38/128)
>答えを教えてもらえると助かります; 利用規約で「課題のマル投げ」は禁止です。 下の方も言われているとおり、文法間違いが数箇所あります。
- kmee
- ベストアンサー率55% (1857/3366)
> ヒントで ところどころ、打ち間違いなのか見間違いなのか原文の間違いなのか、変なところがありますが.... その「ヒント」の中に「答え」があります。
お礼
回答ありがとうございます;
お礼
回答ありがとうございます;