関数の単元です。文字列を逆にする関数を質問させてください。 – プログラミング – Home

関数の単元です。文字列を逆にする関数を...
 
通知
すべてクリア

関数の単元です。文字列を逆にする関数を質問させてください。


なるなる
 なるなる
(@なるなる)
ゲスト
結合: 22年前
投稿: 10
Topic starter  

文字列を入力し、入力した文字列を逆にしmojiretuに格納するvoid gyakumoji(mojiretu[])
関数を作成し、プログラムを完成しなさい。という問題なんですが、入力した文字を逆にするや
り方がわかりません。よろしくおねがいします。


引用解決済
トピックタグ
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

CString::MakeReverse()はアリなのかな?

こういう質問をするときは(それが宿題ならなおのこと)、自分がどこまで努力してどこで
躓いているのかをキッチリ書きましょうね。この質問文では丸投げしているように見えます。


返信引用
なるなる
 なるなる
(@なるなる)
ゲスト
結合: 22年前
投稿: 10
Topic starter  

どうも失礼いたしました。初めてなものでどこまで書いていいのかわからず、すいませんでし
た。どりあえず一応完成させ何度もコンパイルしてはエラーと戦っていました。でもその前にも
っと基本的なところが抜けてるような気がしていて、では作ってみたソースを載せてみたいと思
います。   #include <stdio.h>

void gyakumoji(mojiretu)
{
int i = 0;
int moji[100];

while(mojiretu[i] != '\0'){
mojiretu[i] = moji[i];
i++;
}

return (mojiretu);
}

int main(void)
{
int m, j;
int moji[100];

printf(文字列を入力してください。\n);
scanf(%s, &moji);

printf(逆から読むと%sです。, gyakumoji(moji));

return (0);
}


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

main()の、m, jは何のためにあるのですか?
gyakumoji()のforループで何をしているか把握していますか? 変数のスコープについて、
また文字列が配列の一種であるということについておさらいが必要なようです。

タイトルに「関数の単元」と書いていることから「関数とはなんぞや」ということが理解
できていない(これから勉強するところ)と解釈します。予習のつもりで練習問題をどんど
ん先に進めているつもりなのかもしれませんが、「関数とはなんぞや」「関数とはどうい
う体裁を成していなくてはならないのか」「voidとはなんぞや」「変数のスコープとはな
んぞや」「strなんとか() という標準関数の中でこの場合利用できるものはないか」など
をしっかり把握してから取りかかった方がいいと思います。確かに本を読むだけよりも実
際にプログラムを動かしてみる方が結果が目に見えて楽しいでしょうが、恐らく教科書
の、読み飛ばしているであろう部分に重要なことが書いてあるはずです。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

そうそう、「100文字以上の長い文字列が入力された場合」の対処はいらないのでしょうか。


返信引用
なるなる
 なるなる
(@なるなる)
ゲスト
結合: 22年前
投稿: 10
Topic starter  

確かに関数の単元をやりはじめたばかりなのですが、今の段階で解ける問題らしいです。
-文字列を逆にして格納-ここの部分だけでいいのでヒント等をいただけないでしょうか?


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

>今の段階で解ける問題らしいです。
ならば復習が必要なのでしょう。

>-文字列を逆にして格納-ここの部分だけでいいのでヒント等を

すでに書いている、
>>gyakumoji()のforループで何をしているか把握していますか?
が正にそうなんですけど。

例えば、
  char str[] = abc;
という文字列があったとしたら、
  str[0] == 'a'
  str[1] == 'b'
  str[2] == 'c'
  str[3] == '\0'
ということですよね? これを逆順にする、ということは
  str[0] == 'c'
  str[1] == 'b'
  str[2] == 'a'
  str[3] == '\0'
という結果がほしいんですよね? あなたが作ったgyakumoji()のforループこういうことを
する処理になっていますか?


返信引用
なるなる
 なるなる
(@なるなる)
ゲスト
結合: 22年前
投稿: 10
Topic starter  

確かに僕が作ったプログラムではただmojireruとmojiがひとしくなっているだけで、逆にはな
っていません。ただわからないところなのでこれ以上自分ひとりでは全然。それと上のソースを
すこしいじってみました。ただ逆にするところは適当です。
#include <stdio.h>

void gyakumoji(mojiretu)
{
int n = 0;
int moji[100];

while(scanf(%s, &moji[n]) != '/')
n++;

return (mojiretu);
}

int main(void)
{

printf(文字列を入力してください。\n);

gyakumoji(moji);

return (0);
}


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

>tib 2003/01/07(火) 03:40:57
さんの
>「voidとはなんぞや」

>void gyakumoji(mojiretu)
>{
> int n = 0;
> int moji[100];

> while(scanf(%s, &moji[n]) != '/')
> n++;

> return (mojiretu);
>}
のことで、コンパイルエラーになっていませんか
ということです

今回載せているソースもエラー出てませんか

>scanf(%s, &moji[n])
コンパイラについている、オンラインヘルプなど参照してみてはどうですか
使い方間違っていませんか

>scanf(%s
ここだけ簡単に言うと
入力:”1234567890/”

入力:”/”
も同じ動作します
つまり
%sの
sはstring(文字列)を意味します

今回載せている
> gyakumoji(moji);
の引数「moji」は
mainまたはグローバルのどこに定義しているのでしょうか

AAA(XXX)

CHAR AAA_ccc

BBB(DDD)

  AAA_ccc=’d’ ←これは関数 BBBのローカル変数または
                         グローバル変数として
                         定義されておらず
                  関数 AAAのローカル変数のため
                  ここでは使用できません    

こんなこと教科書などに載ってませんかね

関数を作るための基本くらいは、この単元に至るまでに学習しているはずなので
復習してみてください
アルゴリズムを考える以前の問題のようですけど
ガンバ! ガンバ! ファイト!


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

追伸
皆様の回答を見ると「char型」使っているでしょ
これは、「文字」を扱うと言うことを前提としているためです
扱うデータによってデータの宣言型をキチンと選択することも
重要な学習ではないでしょうか


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 文字列を逆にして格納-ここの部分だけでいいのでヒント等をいただけないでしょう
か?

char* gyakumoji(char* mojiretu) {
int begin;
int end;
begin = 0;
end = /* [mojiretuの長さを求めよ。先頭から'\0'までの距離だ。] */
while ( begin < end ) {
/* [mojiretu[begin] と mojiretu[end] とを入れ替えよ。] */
++begin; /* ひとつ進む */
--end; /* ひとつ戻る */
}
return mojiretu;
}

/* [....] */ の部分は

あなたが書いてください。


返信引用
Loreley
 Loreley
(@Loreley)
ゲスト
結合: 22年前
投稿: 4
 

ここの方々って親切ですよね。
なるなるさんにはそう映ってないかもしれませんけど、
最終的には自分で解かないと身になりませんし。
(解く=理解して答えを導くってことで。辞書で調べたわけじゃないです)
掲示板によっては無視されかねないですから。
ふらりと立ち寄って見かけたんですが、なんとなくそんなことを感じてしまいました・・・

さて、何も書かないのもなんですから voidについて。
voidというのは
intや charと同じような型です。
すごく大雑把に書けば、中身いらない型です。
中身いらないということで、returnで値を返そうとしても、
なるなるさんの書き方ですと
void gyakumojiは拒否します。「いらないってば」って。

return (mojiretu);
で結果を mainに持っていこうとしている時点で、
gyakumojiでなにをやっても無駄になっちゃうわけです。
「gyakumoji君、これmainにもってってよ。」# return (mojiretu);
「いやだよ。っていうか無理。俺 voidだし」# gyakumojiの宣言。

文字をいれるなら、char。
整数をいれるなら、int。
それは関数でも同じです。

もうなるなるさんは見てないかもしれませんが
(επιστημηさんのレスのおかげで解けたのかもしれませんね)
同じような悩みの人がみるかもしれないので、ご参考に。
ではでは。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました