プロが教えるわが家の防犯対策術!

プログラムを以下のように書いたのですが、どこがどう違うのか分からず、お手上げ状態です。
どこを直せばいいのでしょうか?

/* 文字列の並びを反転させる */

#include <stdio.h>

void rev_string(char s[])
{
int len,i;
len = rev_string(char [s]);
for (i = 0; i < len / 2; i++){

char temp = s[i];
s[i] = s[len-i-1];
s[len-i-1] = temp;

}

}

int main(void)
{
char str[128];

printf("文字列を入力してください:");
scanf("%s", str);

printf("文字列\"%s\"を反転したものは%sです。\n", str, rev_string(str));

return 0;
}

よろしくお願いします。

A 回答 (3件)

No.2です。


rev_stringの引数を変えないのであれば、printfの結果表示を工夫しないとダメです。
反転前の文字列を表示 → 反転処理 → 反転後の文字列表示 …という流れで。

#include <stdio.h>
#include <string.h>

void rev_string(char s[])
{
int len, i;
len = strlen(s);
for (i = 0; i < len / 2; i++) {

char temp = s[i];
s[i] = s[len - i - 1];
s[len - i - 1] = temp;

}
}

int main(void)
{
char str[128];

printf("文字列を入力してください:");
scanf("%s", str);

printf("文字列\"%s\"を反転したものは", str);
rev_string(str);
printf("%sです。\n", str);

return 0;
}
    • good
    • 1
この回答へのお礼

なるほど。反転前の文字列がプログラムされてなかったんですね!!
ご丁寧にありがとうございました!!

お礼日時:2020/05/04 23:06

printfでrev_stringを呼び出す前に事前に変換する方法に変えたほうが良いですね。


文字列入力用のバッファと変換用のバッファを用意して、rev_stringの引数として与える。
以上を踏まえると、以下の様な感じのソースに。

#include <stdio.h>
#include <string.h>

void rev_string(char sin[], char sout[])
{
int len, i;
len = strlen(sin);

for (i = 0; i < len; i++) {
sout[i] = sin[len - i - 1];
}
sout[i] = NULL;
}

int main(void)
{
char strin[128], strout[128];

printf("文字列を入力してください:");
scanf("%s", strin);

rev_string(strin, strout);
printf("文字列\"%s\"を反転したものは%sです。\n", strin, strout);

return 0;
}
    • good
    • 0

> len = rev_string(char [s]);


これは何のつもりですか?動く動かない以前に、文法的にむちゃくちゃでは?

len = strlen(s); では?
    • good
    • 1
この回答へのお礼

解決しました!!
ありがとうございました。

お礼日時:2020/05/04 23:08

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A