プロが教える店舗&オフィスのセキュリティ対策術

C言語の課題で困ってます;

学校の課題で、キーボードから文字を入力する(最大80文字)。入力された文字列と、入力した文字列を逆順にした文字列を表示する。(malloc,freeを使って作成して下さい)

ヒントで
#invlude <stdio.h>

void main(void){
char *buf; //入力文字列用
char *seq; //入力文字列用コピー用
char *rev; //逆順文字列用
int lec, i;

buf =(char*)malloc(81);
printf("文字列を入力:");
scanf("%s"buf );
for(i = 0; buf[i] ??? '\0'; i++){
}
Ien = i; /* lenに文字列の長さが入る */
seq = ???(??? + 1); /* len+1文字文確保*/

for(i = 0; ???; i++){
seq[0] = buf[0];
}
free(buf);

rey = ???(len + 1);

for(i = 0; < len; i++){
rev[len - i - 1] = seq[i];
}
ren[i] ~ '\0';
printd("入力文字列 : %s\n",sep);

でたんですが、全然分からなくて足りない部分の答えを教えてもらえると助かります;

A 回答 (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'ですがそれではないですね。逆文字列の出力です。自分で考えて!*/

}
    • good
    • 0

・#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を代入する。
    • good
    • 0
この回答へのお礼

回答ありがとうございます;

お礼日時:2011/02/07 10:39

#3です。



seqとrevを解放するの忘れてました。
free(seq);
free(rev);
    • good
    • 0
この回答へのお礼

回答ありがとうございます、助かりました;

お礼日時:2011/02/07 10:39

>答えを教えてもらえると助かります;



利用規約で「課題のマル投げ」は禁止です。
下の方も言われているとおり、文法間違いが数箇所あります。
    • good
    • 0

> ヒントで



ところどころ、打ち間違いなのか見間違いなのか原文の間違いなのか、変なところがありますが....

その「ヒント」の中に「答え」があります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます;

お礼日時:2011/02/07 10:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!