C言語の練習問題で文字列を反転して並び替える関数を作る処理について
-
- 記事: 336
- 登録日時: 10年前
C言語の練習問題で文字列を反転して並び替える関数を作る処理について
件名に書いたとおりなんですが、文字列abcを反転してcbaに並び替える関数を作る処理ってどうやれば宜しいですか?ヒントかアドバイスをお願いします。
まだコードを書いてません。関数を作らずに文字列を反転させる処理はできますが、関数を作って関数に文字列を反転させる処理をやったことがありません。
多分、この練習問題は応用問題をさせようとしていると思います。
私も色々と考えましたが、うまくいきそうにないです。
まだコードを書いてません。関数を作らずに文字列を反転させる処理はできますが、関数を作って関数に文字列を反転させる処理をやったことがありません。
多分、この練習問題は応用問題をさせようとしていると思います。
私も色々と考えましたが、うまくいきそうにないです。
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
では、まずそのコードを書いて貼ってください。samusu0905 さんが書きました:関数を作らずに文字列を反転させる処理はできますが
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
では、ただ単に作った関数を呼び出すだけのコードはかけますか?
更に、文字列を受け取ってそのまま返すだけのコードはかけますか?
頭のなかでこねこねするよりもプログラムとして書くと気付くことがたくさんあるはずなので
まず、出来る部分をやってみましょう。
更に、文字列を受け取ってそのまま返すだけのコードはかけますか?
頭のなかでこねこねするよりもプログラムとして書くと気付くことがたくさんあるはずなので
まず、出来る部分をやってみましょう。
-
- 記事: 336
- 登録日時: 10年前
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
みけCATさん>>回答有難うございます。
了解しました。ではコードを載せます。
これが関数を作らずに反転させる処理です。
これらの処理を関数を使って応用して処理を行う。
それが練習問題で問われている事なんじゃないかと思われます。
了解しました。ではコードを載せます。
#include <stdio.h>
#include <string.h>
int main()
{
int a=0, b=0, c=0;
char str[] = "abc";
printf("反転前:%s\n", str);
str[0] = 'c';
str[1] = 'b';
str[2] = 'a';
printf("反転後:%s\n", str);
while( c == 0)
{
scanf("%c", &c);
getchar();
return 0;
}
}
これらの処理を関数を使って応用して処理を行う。
それが練習問題で問われている事なんじゃないかと思われます。
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
わかりました。samusu0905 さんが書きました:了解しました。ではコードを載せます。
(略)
これが関数を作らずに反転させる処理です。
これらの処理を関数を使って応用して処理を行う。
それが練習問題で問われている事なんじゃないかと思われます。
あくまで「文字列abcを反転してcbaに並び替える関数を作る処理」を作るのが課題であって、
「文字列defを反転してfedに並び替える」ことはできなくてもいいのですね。
だとしたら、strをそのまま関数に投げて、そこで結果を生成するだけです。
(だとしなくても、strのみを関数に投げて(引数として渡して)結果を生成できます)
これでほぼ答えを書いてしまいましたね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
- 記事: 336
- 登録日時: 10年前
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
みけCATさん>>回答有難うございます。
わざわざすみませんね。
確かにほぼ回答ですね。とりあえずコード参考にして書いてみます。
usaoさん>>回答有難うございます。
>これは「並び替え」と称される処理ではないよね.
このように仰ってますが、教材には実際にそのように書いてありましたよ。
わざわざすみませんね。
確かにほぼ回答ですね。とりあえずコード参考にして書いてみます。
usaoさん>>回答有難うございます。
>これは「並び替え」と称される処理ではないよね.
このように仰ってますが、教材には実際にそのように書いてありましたよ。
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
オフトピック
その教材が何物かわからないのであくまで推測ですが、その教材の例はあくまで説明のために文字列は決め打ち、文字数3文字固定の例を書いているだけで、
そのうち文字列読み込みや繰り返し構文を使って、文字列を読み込ませたり文字数を可変に変えて一般化した処理の説明が出てくるのだと思います。
…そうでないと別の練習問題で「文字列を1000文字にしてやってみよう」なんて出たときに、
str[0]~str[999]に代入する処理が書かれることになってしまいますから(ノ∀`)
さらに文字列が可変になった時点でハードコーディングはできなくなりますから。
そのうち文字列読み込みや繰り返し構文を使って、文字列を読み込ませたり文字数を可変に変えて一般化した処理の説明が出てくるのだと思います。
…そうでないと別の練習問題で「文字列を1000文字にしてやってみよう」なんて出たときに、
str[0]~str[999]に代入する処理が書かれることになってしまいますから(ノ∀`)
さらに文字列が可変になった時点でハードコーディングはできなくなりますから。
► スポイラーを表示
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ
-
- 記事: 336
- 登録日時: 10年前
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
みけCATさん>>こんな感じでコードを書きました。
このコードが果たして適切かどうかわかりませんが。
実行結果は
abc→cba
このように並び替えは出来ました。
#include <stdio.h>
int rranges(char str[]);
int main()
{
int a=0, b=0, c=0;
char str[] = "abc";
printf("反転前:%s\n", str);
rranges(str);
printf("反転後:%s\n", str);
while( c == 0)
{
scanf("%c", &c);
getchar();
return 0;
}
}
int rranges(char str[])
{
//char c;
str[0] = 'c';
str[1] = 'b';
str[2] = 'a';
return str[3];
}
実行結果は
abc→cba
このように並び替えは出来ました。
-
- 記事: 336
- 登録日時: 10年前
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
asdさん>>回答有難うございます。
>そうでないと別の練習問題で「文字列を1000文字にしてやってみよう」なんて出たときに、
>str[0]~str[999]に代入する処理が書かれることになってしまいますから
それはわかってますよ。では私がやろうとしている課題の答えを書いてもらえませんか?
これ以上時間かけたくないので。
それに後もう少しでうまくいきそうなんですよ。どうすればいいですか?「自分で考えろ」って言いたいんですか?
初級者さん>>それは私が書いたコードと同じですよ。
そのコードでもう一工夫が必要なんですが、私にはできないんです。
>そうでないと別の練習問題で「文字列を1000文字にしてやってみよう」なんて出たときに、
>str[0]~str[999]に代入する処理が書かれることになってしまいますから
それはわかってますよ。では私がやろうとしている課題の答えを書いてもらえませんか?
これ以上時間かけたくないので。
それに後もう少しでうまくいきそうなんですよ。どうすればいいですか?「自分で考えろ」って言いたいんですか?
初級者さん>>それは私が書いたコードと同じですよ。
そのコードでもう一工夫が必要なんですが、私にはできないんです。
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
では、反転したい文字列が
"abcdefghijklmnopqrstuvwxyz0123456789@+-*/;:!#$%&'()\<>?[]{}"
だったら、どうしましょうか。
"abcdefghijklmnopqrstuvwxyz0123456789@+-*/;:!#$%&'()\<>?[]{}"
だったら、どうしましょうか。
-
- 記事: 336
- 登録日時: 10年前
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
その場合は
str = "-------";みたいな感じでコードを書けばいいのでは?
(あるいはstr = '-----';かな)
str = "-------";みたいな感じでコードを書けばいいのでは?
(あるいはstr = '-----';かな)
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
初めまして。素人考えですが、こういうのはどうでしょうか?
1、まず反転させる文字列の文字数を取得する。
(for文を使って1文字ずつ調査。ヌル文字が出てくるまで繰り返す)
2、文字数を変数aとする。
3、反転用文字型配列に、文字列[a]をいれる(追加)。
4、aの値を1減らす。
5、3→4の繰り返し。aがゼロになったら終了。
という者ですが…。
考えが間違っていたら申し訳ありません><
編集:入れる=代入というイメージがついてしまいそうなので、(追加)←連結という意味の文章を追加しました。
1、まず反転させる文字列の文字数を取得する。
(for文を使って1文字ずつ調査。ヌル文字が出てくるまで繰り返す)
2、文字数を変数aとする。
3、反転用文字型配列に、文字列[a]をいれる(追加)。
4、aの値を1減らす。
5、3→4の繰り返し。aがゼロになったら終了。
という者ですが…。
考えが間違っていたら申し訳ありません><
編集:入れる=代入というイメージがついてしまいそうなので、(追加)←連結という意味の文章を追加しました。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
適切とは言えませんが、致命的な間違いは無さそうです。samusu0905 さんが書きました:このコードが果たして適切かどうかわかりませんが。
・18行目: scanfの%cはchar*型の引数を要求しますが、&cはint*型です。
int型のサイズがchar型のサイズ以上ならば、バッファオーバーランにはなりません。
・rranges関数が戻り値を返す必要は、今のところないはずです。
・32行目でstr[3]を返しており、ぱっと見範囲外のように見えますが、
ここは範囲外ではなく、'\0'が入っているはずなので大丈夫です。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
この練習問題が載っている書籍/サイトなど(の後ろの方?)に模範解答は載っていないのですか?samusu0905 さんが書きました:では私がやろうとしている課題の答えを書いてもらえませんか?
これ以上時間かけたくないので。
それに後もう少しでうまくいきそうなんですよ。どうすればいいですか?「自分で考えろ」って言いたいんですか?
確認してみてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
さっきの冗談コードじゃなくって、もっとまともなのを…。
#include <stdio.h>
#include <string.h>
void hanten(char *s)
{
int i, j;
for (i = 0, j = strlen(s)-1; i < j; i++, j--) {
char t;
t = s[i], s[i] = s[j], s[j] = t;
}
}
int main(void)
{
char str[] = "abc";
char str2[] = "abcdefghijklmnopqrstuvwxyz0123456789@+-*/;:!#$%&'()\\<>?[]{}";
printf("反転前:%s\n", str);
hanten(str);
printf("反転後:%s\n", str);
printf("反転前:%s\n", str2);
hanten(str2);
printf("反転後:%s\n", str2);
return 0;
}
-
- 記事: 336
- 登録日時: 10年前
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
解答はサイトに載っているんですが、コードではなく、「教材の中のプログラムの番号を参照」みたいな感じで書いてあったので、そのプログラムを探しましたが、そのプログラムの番号が何ページを示しているのか分からないんです。program82.cとか書いてありましたが、それに当てはまるページが無かったです。今は教材の第8章の最終問題をやってます。
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
「そのプログラムの番号が何ページを示しているのか」というのがよくわからないのですが、
『猫でもわかるC言語プログラミング』という書籍をお使いでしたら、
http://www.sbcr.jp/products/4797372786.htmlの下にある
「『猫でもわかるC言語プログラミング 第3版』ソースコードと練習問題解答」でDLできるファイルの中の、
「NekoC_Answer/Chap08/program83/program83.c」がそれっぽい内容でした。
『猫でもわかるC言語プログラミング』という書籍をお使いでしたら、
http://www.sbcr.jp/products/4797372786.htmlの下にある
「『猫でもわかるC言語プログラミング 第3版』ソースコードと練習問題解答」でDLできるファイルの中の、
「NekoC_Answer/Chap08/program83/program83.c」がそれっぽい内容でした。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
- 記事: 336
- 登録日時: 10年前
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
教材を参考にしてコードを打ち込んだらできました。
皆さんお世話になりました。特に、みけCATさん有難うございます。
皆さんお世話になりました。特に、みけCATさん有難うございます。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
自分に応用力や発想力を付けるために問題をやっているのか、単に答えが合っていればよいのかで話は変わりますが
課題じゃないのなら、何のためにやっているか考えたほうが良くないですか? 自分で自分の発想力を広げるチャンスを潰している気がします。では私がやろうとしている課題の答えを書いてもらえませんか?
これ以上時間かけたくないので。
それに後もう少しでうまくいきそうなんですよ。どうすればいいですか?「自分で考えろ」って言いたいんですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
スポイラー部分に書いておきましたが、それがあなたの本音ですね。samusu0905 さんが書きました:asdさん>>回答有難うございます。
>そうでないと別の練習問題で「文字列を1000文字にしてやってみよう」なんて出たときに、
>str[0]~str[999]に代入する処理が書かれることになってしまいますから
それはわかってますよ。では私がやろうとしている課題の答えを書いてもらえませんか?
これ以上時間かけたくないので。
「プログラミングなんてどうでもいいから、動くプログラムを自分の代わりに書け。私は時間を無駄にしたくない。」
最初に書き込んだ時点であなたの過去の質問からまともに相手にするリスクがあることが明白でしたから
あえてオフトピックのみの書き込みにした次第です。
#回答者の方々が割いた時間は知ったこっちゃないですか?
苦言だけだとあれなのでさらに申し上げておくと、
アナタは何も分かってないですよ。
わかっていたらusaoさんのオフトピックに対して、
こんな返答はしないはずです。samusu0905 さんが書きました: usaoさん>>回答有難うございます。
>これは「並び替え」と称される処理ではないよね.
このように仰ってますが、教材には実際にそのように書いてありましたよ。
(これは並べ替えではないという指摘に対して、教材に記載されている並び替え処理だと言い張ったわけです)
ご自分で考えるのは嫌なんですか?samusu0905 さんが書きました: それに後もう少しでうまくいきそうなんですよ。どうすればいいですか?「自分で考えろ」って言いたいんですか?
何のためにあなたはプログラミングをなさっているのですか?
・プログラムを作りたいのですか?
・プログラムを動かしたいのですか?
・動くプログラムを眺めたいだけですか?
・プログラミングをしたつもりになりたいだけですか?
あと少しでうまくいきそうだったのに回答丸写しで解決したんですか?samusu0905 さんが書きました:教材を参考にしてコードを打ち込んだらできました。
皆さんお世話になりました。特に、みけCATさん有難うございます。
いずれにせよ、使用している教材の回答はみけCATさんが提示しているので、
今後は何も考えずにそちらからコピペすればいいですよ。
そうすれば時間を無駄にせずに済みます。
ただしそれはプログラミングではなくコピペです。
プログラミングという観点からみると一切あなたの糧にはなりません。
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
一切糧にならない作業をしている=その分時間を無駄にしている と考えることもできますね。asd さんが書きました:いずれにせよ、使用している教材の回答はみけCATさんが提示しているので、
今後は何も考えずにそちらからコピペすればいいですよ。
そうすれば時間を無駄にせずに済みます。
ただしそれはプログラミングではなくコピペです。
プログラミングという観点からみると一切あなたの糧にはなりません。
samusu0905さんは自分が何がしたいのかをよく考え、それに向けて(効率的に)行動しようとするべきです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
確かにプログラミングを効率的に学ぼうとする人ならそのような考えになってくれると思いますが…。みけCAT さんが書きました:一切糧にならない作業をしている=その分時間を無駄にしている と考えることもできますね。asd さんが書きました:いずれにせよ、使用している教材の回答はみけCATさんが提示しているので、
今後は何も考えずにそちらからコピペすればいいですよ。
そうすれば時間を無駄にせずに済みます。
ただしそれはプログラミングではなくコピペです。
プログラミングという観点からみると一切あなたの糧にはなりません。
samusu0905さんは自分が何がしたいのかをよく考え、それに向けて(効率的に)行動しようとするべきです。
samusu0905さんが何をしたいのかはみなさんの問いに対する回答次第とは思いますが、今までの書き込みから本人にはプログラムの動作仕様を理解するつもりは毛頭なく、
動けばそれで満足なんじゃないでしょうか。
# プログラミングをしたいわけじゃないので、プログラミングの糧になることが時間の無駄だと言ってしまうわけで。
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
オフトピック
ゲームとかでも攻略情報の通りに「なぞるだけ」の作業を楽しむ人たちもいるみたいですし
そういうタイプ?
その感覚は全く理解できないけれども.
そういうタイプ?
その感覚は全く理解できないけれども.
-
- 記事: 336
- 登録日時: 10年前
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
皆さん返信遅れてすみませんでした。
まだC言語を学んで一年も経たないので、プログラミングの経験を積む途中です。
>動けばそれで満足なんじゃないでしょうか。
># プログラミングをしたいわけじゃないので、プログラミングの糧になることが時間の無駄だと言ってしまうわけで。
私はプログラムがただ動けばいいとは思ってません。そのような考えは全くありません。ですが、本当に
分からない問題が出てきたときに皆さんに色々とヒントやアドバイスを貰いたいだけです。
>・プログラムを作りたいのですか?
>・プログラムを動かしたいのですか?
>・動くプログラムを眺めたいだけですか?
>・プログラミングをしたつもりになりたいだけですか?
プログラムを作りたいが本音です。 そして、習得したプログラムをゲーム制作に役立てたいと思ってます。
動くプログラムをただ眺めたいだけなら,プログラムを作りたいとも思いませんよ。
ただ眺めるなんてつまらないですよ。
まだC言語を学んで一年も経たないので、プログラミングの経験を積む途中です。
>動けばそれで満足なんじゃないでしょうか。
># プログラミングをしたいわけじゃないので、プログラミングの糧になることが時間の無駄だと言ってしまうわけで。
私はプログラムがただ動けばいいとは思ってません。そのような考えは全くありません。ですが、本当に
分からない問題が出てきたときに皆さんに色々とヒントやアドバイスを貰いたいだけです。
>・プログラムを作りたいのですか?
>・プログラムを動かしたいのですか?
>・動くプログラムを眺めたいだけですか?
>・プログラミングをしたつもりになりたいだけですか?
プログラムを作りたいが本音です。 そして、習得したプログラムをゲーム制作に役立てたいと思ってます。
動くプログラムをただ眺めたいだけなら,プログラムを作りたいとも思いませんよ。
ただ眺めるなんてつまらないですよ。
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
……であれば,
「答えもそうなっていたので」
「答えの通りに書いたら動いたので」
といって終わらせるのでは何も得るものがない,という話が理解できそうなものですけど.
「答えもそうなっていたので」
「答えの通りに書いたら動いたので」
といって終わらせるのでは何も得るものがない,という話が理解できそうなものですけど.
オフトピック
このトピックの表題を読めば,
・なにかしら文字列があります.
・(問題を簡単にするために文字数はN文字です,とかいうのがわかっている前提であっても最初はまぁよい)
・この文字列の文字の並びが逆順になるように,文字列の内容を入れ替える関数を書きなさい
といった話だと捉えるのが普通の感覚だと思います.
例えば
という感じの問題ですね.
「元がabcだから cbaってダイレクトに書けばOK」という内容だと捉えるのは,
何かが決定的にずれている ように思います.個人的に.
・なにかしら文字列があります.
・(問題を簡単にするために文字数はN文字です,とかいうのがわかっている前提であっても最初はまぁよい)
・この文字列の文字の並びが逆順になるように,文字列の内容を入れ替える関数を書きなさい
といった話だと捉えるのが普通の感覚だと思います.
例えば
void InvertStr( char *str, size_t str_length )
{
//ここの中身を考えよう!
}
void main()
{
char str[100]; //※とりあえずこれが十分なサイズなのだと仮定した上で
scanf( "%s", str );
printf( "input : %s\n", str );
InvertStr( str, strlen(str) );
printf( "output : %s\n", str );
return 0;
}
「元がabcだから cbaってダイレクトに書けばOK」という内容だと捉えるのは,
何かが決定的にずれている ように思います.個人的に.
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
これなどゲームだとアイテムの並び替えなど操作に通じるすごく基礎的な練習問題です。
つまり、これを自分で考えつけないとしたらゲームを作るのは非常に困難だということです。
安易に妥協することで、考えるクセを付けることを排除しているようにしか見えないので、これを続けると段々と目的から逸れていくと思います。
プログラムとして大事な要素である「よく考える・アイデアをひねり出す」が嫌いなんじゃないかと思えてくるのです。
つまり、これを自分で考えつけないとしたらゲームを作るのは非常に困難だということです。
安易に妥協することで、考えるクセを付けることを排除しているようにしか見えないので、これを続けると段々と目的から逸れていくと思います。
プログラムとして大事な要素である「よく考える・アイデアをひねり出す」が嫌いなんじゃないかと思えてくるのです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
- 記事: 336
- 登録日時: 10年前
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
usaoさん>>
>「答えもそうなっていたので」
>「答えの通りに書いたら動いたので」
答え通りには書いてませんよ。というより、私が見たのは答えともいえませんから。むしろ、参考にして教材に載っているプログラムを自分なりに変えただけですよ。答えとは言えません。参考程度です。
softyaさん>>
確かにそうですね。文字を並び替えるプログラムを覚えておけば、アイテムの並び替えの際にとても便利ですね。
>プログラムとして大事な要素である「よく考える・アイデアをひねり出す」が嫌いなんじゃないかと思えてくるのです。
私はよく考えてアイデアをひねり出すのは好きなほうですよ。ただ、いくら考えてもアイデアが思いつかない
時がゲーム制作でもあります。
>「答えもそうなっていたので」
>「答えの通りに書いたら動いたので」
答え通りには書いてませんよ。というより、私が見たのは答えともいえませんから。むしろ、参考にして教材に載っているプログラムを自分なりに変えただけですよ。答えとは言えません。参考程度です。
softyaさん>>
確かにそうですね。文字を並び替えるプログラムを覚えておけば、アイテムの並び替えの際にとても便利ですね。
>プログラムとして大事な要素である「よく考える・アイデアをひねり出す」が嫌いなんじゃないかと思えてくるのです。
私はよく考えてアイデアをひねり出すのは好きなほうですよ。ただ、いくら考えてもアイデアが思いつかない
時がゲーム制作でもあります。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
>教材を参考にしてコードを打ち込んだらできました。
>皆さんお世話になりました。特に、みけCATさん有難うございます。
そのままじゃないのなら、そのコードを提示するのが掲示板のルールと成っています。
何処をどのように考えたコードなのか、コードが物語ってくれます。
>皆さんお世話になりました。特に、みけCATさん有難うございます。
そのままじゃないのなら、そのコードを提示するのが掲示板のルールと成っています。
何処をどのように考えたコードなのか、コードが物語ってくれます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
あえて強い言い方をさせていただければ、申し訳ありませんがその言葉は信用なりません。samusu0905 さんが書きました:皆さん返信遅れてすみませんでした。
まだC言語を学んで一年も経たないので、プログラミングの経験を積む途中です。
>動けばそれで満足なんじゃないでしょうか。
># プログラミングをしたいわけじゃないので、プログラミングの糧になることが時間の無駄だと言ってしまうわけで。
私はプログラムがただ動けばいいとは思ってません。そのような考えは全くありません。ですが、本当に
分からない問題が出てきたときに皆さんに色々とヒントやアドバイスを貰いたいだけです。
ヒントやアドバイスをもらいたいだけのはずなのに私に対しての一つ目の回答が以下でした。
この書き込みは「時間をかけたくないから答えを出せ」以外の意味には取れませんでした。samusu0905 さんが書きました:asdさん>>回答有難うございます。
>そうでないと別の練習問題で「文字列を1000文字にしてやってみよう」なんて出たときに、
>str[0]~str[999]に代入する処理が書かれることになってしまいますから
それはわかってますよ。では私がやろうとしている課題の答えを書いてもらえませんか?
これ以上時間かけたくないので。
とてもプログラムを勉強しようという人の言葉とは思えません。
ヒントやアドバイスではなく「答え」を求めているからです。
回答者の方々もあなたの「解決しました」だけのコメントを眺めてもつまらないですよ。samusu0905 さんが書きました: >・プログラムを作りたいのですか?
>・プログラムを動かしたいのですか?
>・動くプログラムを眺めたいだけですか?
>・プログラミングをしたつもりになりたいだけですか?
プログラムを作りたいが本音です。 そして、習得したプログラムをゲーム制作に役立てたいと思ってます。
動くプログラムをただ眺めたいだけなら,プログラムを作りたいとも思いませんよ。
ただ眺めるなんてつまらないですよ。
softyaさんも仰っている通り、解決したプログラムをきちんと貼り付けたうえで、
どういう処理を行ったことで解決に導いたのかを説明してもらわないと。
プログラムを作るためにはプログラムを理解する必要があります。
プログラムを理解していればプログラムを説明できるはずです。
このプロセスをそっちのけにしているから「プログラムを作りたい」ようには見えなかったわけです。
現状では、
1.みけCATさんが回答プログラムのありかを提示
2.打ち込んだらできましたのみの解決コメント
で終わっているので、プログラムを作成した証がなにもない状態なのです。
プログラミング初心者であっても構いませんが、そろそろ質問初心者は卒業しませんか?
回答をつけてくれている方たちは、少しでも質問者さんに自分で考えられるよう、
プログラミングの内容以外にも直したほうがいいことやお願いを書き込んでいます。
(質問時のソース提示、解決時のソース提示・説明などなど)
質問初心者のままでは本題であるプログラムの質問も正しくやり取りができなくなってしまいますよ。
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
まぁ,何をどうしたか みたいなことよりも,
ご自身で得るものがあったということであれば それでいいと思います.
ご自身で得るものがあったということであれば それでいいと思います.
オフトピック
例えば,今回の練習問題に取り組んだ結果として,
私が先に書いたような例題なんて朝飯前になった という話であれば無駄ではなかったと言えるでしょう.
そうでないならば,どうにも残念なお話という感じになっちゃうかな,と…
私が先に書いたような例題なんて朝飯前になった という話であれば無駄ではなかったと言えるでしょう.
そうでないならば,どうにも残念なお話という感じになっちゃうかな,と…
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
オフトピック
本人が得るものがあったならば本人はいいかもしれませんが、「できました、解決しました」だけで終わられるとusao さんが書きました:まぁ,何をどうしたか みたいなことよりも,
ご自身で得るものがあったということであれば それでいいと思います.
本人だけのサポートセンターと化してしまう気がします(´・ω・`)
プログラムの内容は説明できなくとも、本人が納得した最終プログラムの提示くらいはしてほしいものです。
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ
-
- 記事: 336
- 登録日時: 10年前
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
わかりました。
色々とご迷惑をお掛けしました。解決すれば大丈夫かなとばかり思ってました。このサイトのルールに違反していることが今回の皆さんの回答で良くわかりました。次からはコードを提示していきたいと思います。
>プログラムの内容は説明できなくとも、本人が納得した最終プログラムの提示くらいはしてほしいものです。
では、コードの内容を説明できなくても、納得したプログラムを提示すればいいわけですね?
了解しました。次からそのようにします。
色々とご迷惑をお掛けしました。解決すれば大丈夫かなとばかり思ってました。このサイトのルールに違反していることが今回の皆さんの回答で良くわかりました。次からはコードを提示していきたいと思います。
>プログラムの内容は説明できなくとも、本人が納得した最終プログラムの提示くらいはしてほしいものです。
では、コードの内容を説明できなくても、納得したプログラムを提示すればいいわけですね?
了解しました。次からそのようにします。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
言葉尻を捕らえて、
>では、コードの内容を説明できなくても、納得したプログラムを提示すればいいわけですね?
というのは自分では理解できていない。
つまり、やったことに意味が無いと言っている様なものなので、そんなことを言うのはやめておきましょう。
>では、コードの内容を説明できなくても、納得したプログラムを提示すればいいわけですね?
というのは自分では理解できていない。
つまり、やったことに意味が無いと言っている様なものなので、そんなことを言うのはやめておきましょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
次からといわず、このトピックからルール違反を改めていきませんか?samusu0905 さんが書きました:わかりました。
色々とご迷惑をお掛けしました。解決すれば大丈夫かなとばかり思ってました。このサイトのルールに違反していることが今回の皆さんの回答で良くわかりました。次からはコードを提示していきたいと思います。
>プログラムの内容は説明できなくとも、本人が納得した最終プログラムの提示くらいはしてほしいものです。
では、コードの内容を説明できなくても、納得したプログラムを提示すればいいわけですね?
了解しました。次からそのようにします。
結局どのようなコードで思った通りに動いたと判断されたのでしょうか?
動作するプログラムを張り付けてみてください。
確かにプログラムを提示してそれ以降トピックには来なくなってしまったら質問者本人としてはそこで終わりですが、softya(ソフト屋) さんが書きました:言葉尻を捕らえて、
>では、コードの内容を説明できなくても、納得したプログラムを提示すればいいわけですね?
というのは自分では理解できていない。
つまり、やったことに意味が無いと言っている様なものなので、そんなことを言うのはやめておきましょう。
プログラムを提示してもらって、それに対して回答者さんたちから回答がついて、プログラムを理解するきっかけにになればと
思っています。
またプログラムの提示さえあれば、(反面教師的な使い方であっても)有用なトピックに持っていくことはできるのかなと。
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ
-
- 記事: 336
- 登録日時: 10年前
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
softyaさん>>すみませんでした気を付けます::
>つまり、やったことに意味が無いと言っている様なものなので、そんなことを言うのはやめておきましょう。
では、これからは、私が書いたコードを出来る限り丁寧に説明したいと思います。多少説明不足でもそこは勘弁してください。
asdさん>>
>次からといわず、このトピックからルール違反を改めていきませんか?
>結局どのようなコードで思った通りに動いたと判断されたのでしょうか?
>動作するプログラムを張り付けてみてください。
そうします。ルール違反には気をつけます。
コードはこんな感じですね。
これでルール違反していないことになりますね。
もうここのトピックは大丈夫そうですが。。
>つまり、やったことに意味が無いと言っている様なものなので、そんなことを言うのはやめておきましょう。
では、これからは、私が書いたコードを出来る限り丁寧に説明したいと思います。多少説明不足でもそこは勘弁してください。
asdさん>>
>次からといわず、このトピックからルール違反を改めていきませんか?
>結局どのようなコードで思った通りに動いたと判断されたのでしょうか?
>動作するプログラムを張り付けてみてください。
そうします。ルール違反には気をつけます。
#include <stdio.h>
#include <string.h>
void rranges(char *str);
int main()
{
int c=0;
char str[256] = {"io"};
//char str2[] = "cba";
printf("文字列を入力してください------\n");
scanf("%s", &str);
printf("反転前:%s\n", str);
rranges(str);
printf("反転後:%s\n", str);
while( c == 0)
{
scanf("%c", &c);
getchar();
}
return 0;
}
void rranges(char *str)
{
int i,j;
for( i=0, j = strlen(str)-2; i < j; i++, j--)
{
char t;
t = str[i], str[i] = str[j], str[j] = t;
}
}
これでルール違反していないことになりますね。
もうここのトピックは大丈夫そうですが。。
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
早速説明なしですが。samusu0905 さんが書きました:softyaさん>>すみませんでした気を付けます::
>つまり、やったことに意味が無いと言っている様なものなので、そんなことを言うのはやめておきましょう。
では、これからは、私が書いたコードを出来る限り丁寧に説明したいと思います。多少説明不足でもそこは勘弁してください。
また、かずまさんが指摘しているように、反転できていません。
さらにいうとどこからか湧いてきた文字列読み込み処理が増えています。
これらをまとめると、
・プログラムを組んだのではなく、どこからかコピーしてきただけ
→プログラムの動作については考える気なし
・出来上がったプログラムが仕様を満たしていない
→コンパイルが通ってなんとなく動いたらそれでOKと思っている
本当にプログラムを学ぶ気があるのならば、
・なぜかずまさんの提示しているような結果になるのかを、ソースを追って解明してください
・出来上がったプログラムの動作確認は十分に行ってください
→正常系はもちろんのこと、余力があれば異常系(わざと変な値を入力するなど)のテストも行い、
正常系であればどんな入力でも正しく反転されるかを確認してください
すでに指摘のある通り、反転する関数ができていません(バグがあります)samusu0905 さんが書きました: コードはこんな感じですね。
これでルール違反していないことになりますね。
もうここのトピックは大丈夫そうですが。。
そして文字列の入力処理など、当初は一切記載されていなかった部分について、
どのように調べ、入力したのかを説明してもらえませんか?
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
それは単に、自分で入力した任意の文字列を反転させたいと思ったからで、asd さんが書きました: さらにいうとどこからか湧いてきた文字列読み込み処理が増えています。
取り立てて問題視する必要はないと思います。
固定の文字列を反転させるだけでは物足りないと思われたのでありましょう。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
ご指摘ありがとうございます。box さんが書きました:それは単に、自分で入力した任意の文字列を反転させたいと思ったからで、asd さんが書きました: さらにいうとどこからか湧いてきた文字列読み込み処理が増えています。
取り立てて問題視する必要はないと思います。
固定の文字列を反転させるだけでは物足りないと思われたのでありましょう。
もちろん質問者さんがきちんとその処理を理解した上で改良したというのであれば、
特に問題視するつもりはありませんでしたが、そのあたりの説明がなかったのであえて指摘しています。
そのあたりの説明も含め、質問者さんの補足を待ちたいと思います。
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ
-
- 記事: 336
- 登録日時: 10年前
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
かずまさん>>すみません。多分それ、プログラムの入力ミスです。
訂正しました。
私なりには理解しました。
#include <stdio.h>
#include <string.h>
void rranges(char *str);
int main()
{
int c=0;
char str[256] = {"io"};
//char str2[] = "cba";
printf("文字列を入力してください------\n");
scanf("%s", &str);
printf("反転前:%s\n", str);
rranges(str);
printf("反転後:%s\n", str);
while( c == 0)
{
scanf("%c", &c);
getchar();
}
return 0;
}
void rranges(char *str)
{
int i,j;
for( i=0, j = strlen(str)-1; i < j; i++, j--)
{
char t;
t = str[i], str[i] = str[j], str[j] = t;
}
}
私なりには理解しました。
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
何も根拠を提示せずに「理解しました」とだけ言われても、申し訳ないですが信じられません。samusu0905 さんが書きました:私なりには理解しました。
こう指摘されている通り、コードの説明を行ってください。asd さんが書きました:本当にプログラムを学ぶ気があるのならば、
・なぜかずまさんの提示しているような結果になるのかを、ソースを追って解明してください
・出来上がったプログラムの動作確認は十分に行ってください
→正常系はもちろんのこと、余力があれば異常系(わざと変な値を入力するなど)のテストも行い、
正常系であればどんな入力でも正しく反転されるかを確認してください
すでに指摘のある通り、反転する関数ができていません(バグがあります)samusu0905 さんが書きました: コードはこんな感じですね。
これでルール違反していないことになりますね。
もうここのトピックは大丈夫そうですが。。
そして文字列の入力処理など、当初は一切記載されていなかった部分について、
どのように調べ、入力したのかを説明してもらえませんか?
それとも、asdさんに「解明」「説明」の定義を示してもらった方がいいですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
最大の疑問は「多分それ、プログラムの入力ミスです。」とあるのに解決していたことですかね。
前回のコードはバグが有り、今回の問題はバグが直っているとして、バグの有るコードで解決していたのはなぜか? 疑問は尽きません。
前回のコードはバグが有り、今回の問題はバグが直っているとして、バグの有るコードで解決していたのはなぜか? 疑問は尽きません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
みけCATさんの投稿にもあったように、具体的に何をすればいいのかわからなかったかもしれないので、
以下、具体的にやってほしいことを書き出してみました。
本当にプログラムを勉強するつもりであれば、最低限抑えてほしい内容ばかりです。
本当に理解できているかどうかの確認です。
・当初存在していなかった文字列入力処理の説明
→どうやってユーザーからの入力を実現し、どこにどのように格納されるのか?(制限事項があれば合わせて記しておくといいですね)
・期待する動作(何を入力するとどう出力されるのが正しいのか)
・訂正した箇所
・訂正前のプログラムでの問題点(訂正前は○○がXXだったのでこう直した)
・訂正後のプログラムで検証に用いた入力データと期待する出力(実行前に考えた内容)、および実際の実行結果(実行前の期待した結果と一致したのか)
→正常系と異常系に分けて提示されているとよりいいですね。abc以外の入力についても当然確認してほしいと思っています。
現状では説明不足というレベルではなく、説明皆無ですよ。
有言実行でお願いします。
以下、具体的にやってほしいことを書き出してみました。
本当にプログラムを勉強するつもりであれば、最低限抑えてほしい内容ばかりです。
では、以下説明をお願いします。samusu0905 さんが書きました: 訂正しました。
私なりには理解しました。
本当に理解できているかどうかの確認です。
・当初存在していなかった文字列入力処理の説明
→どうやってユーザーからの入力を実現し、どこにどのように格納されるのか?(制限事項があれば合わせて記しておくといいですね)
・期待する動作(何を入力するとどう出力されるのが正しいのか)
・訂正した箇所
・訂正前のプログラムでの問題点(訂正前は○○がXXだったのでこう直した)
・訂正後のプログラムで検証に用いた入力データと期待する出力(実行前に考えた内容)、および実際の実行結果(実行前の期待した結果と一致したのか)
→正常系と異常系に分けて提示されているとよりいいですね。abc以外の入力についても当然確認してほしいと思っています。
できる限り丁寧な説明を期待しています。samusu0905 さんが書きました:softyaさん>>すみませんでした気を付けます::
>つまり、やったことに意味が無いと言っている様なものなので、そんなことを言うのはやめておきましょう。
では、これからは、私が書いたコードを出来る限り丁寧に説明したいと思います。多少説明不足でもそこは勘弁してください。
現状では説明不足というレベルではなく、説明皆無ですよ。
有言実行でお願いします。
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
常連さんたちからの波状攻撃は
いつまで続くのでしょうか。
もうそろそろお開きにして
いい頃合いのような気がします。
いつまで続くのでしょうか。
もうそろそろお開きにして
いい頃合いのような気がします。
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
オフトピック
質問攻めにしてしまったのは申し訳ないと思いますが、それだけ疑問に残るようなやり取りで終わってしまったということではないでしょうか。初級者 さんが書きました:常連さんたちからの波状攻撃は
いつまで続くのでしょうか。
もうそろそろお開きにして
いい頃合いのような気がします。
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ
-
- 記事: 336
- 登録日時: 10年前
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
私の説明やプログラムで間違いがかなりあったため、このように質問攻めされていると思います。
それでは丁寧に、簡潔に説明します。
まず、自作関数として、void rranges(char *str)をプロトタイプ宣言します。(文字列を反転させる関数)
次にmain()関数でローカル変数宣言でchar str[256];を宣言します。
次に文字列を入力させるようにユーザーに命令します。入力する際はscanf()関数を利用して文字列を習得し、strに文字列を格納します。
printf()関数で反転前の文字列を描画 →abc
その次に、プロトタイプ宣言した自作のrranges()関数を呼び出します。
このときに自作関数では文字列を反転させる処理を行わせるようにします。
最後に反転後の文字列を描画 →cba
以上がプログラムを組み込んだ手順です。
ここからさきは直した場所と、自作関数についての説明です。皆さんが望む説明になればいいかなと思っています。
自作関数のrranges()関数は、まず、引数にchar *strを渡します。
次に関数の中身の処理を説明します。
int i,j;の変数を宣言します。
for文で、iを0に初期化、jに初期値としてstrlen(str)-1を代入します。
i < jなら、iを1ずつ加算、jを1ずつ減算します。
その後にfor文の中の処理で、まずchar tを宣言しておきます。ここでtを宣言する理由は文字列を反転させるために、空の文字列が必要だからです。
空のtにstrを代入します(ここではstrの添え字iは、ユーザーが入力した先頭の文字を表します。)。
次に、空のstrにstr[j]を代入します。(ここで言うstr[j]はabcのcの文字)
最後に、一番最初に代入した。ユーザーが入力した先頭文字(ここではa)を空のstr[j]に代入して終了です。
かなり長くなってしまいましたが、いかがですか?私の説明で皆さんは納得しましたか?
これ以上の説明は出来ませんので、勘弁してください。
以上です。
それでは丁寧に、簡潔に説明します。
まず、自作関数として、void rranges(char *str)をプロトタイプ宣言します。(文字列を反転させる関数)
次にmain()関数でローカル変数宣言でchar str[256];を宣言します。
次に文字列を入力させるようにユーザーに命令します。入力する際はscanf()関数を利用して文字列を習得し、strに文字列を格納します。
printf()関数で反転前の文字列を描画 →abc
その次に、プロトタイプ宣言した自作のrranges()関数を呼び出します。
このときに自作関数では文字列を反転させる処理を行わせるようにします。
最後に反転後の文字列を描画 →cba
以上がプログラムを組み込んだ手順です。
ここからさきは直した場所と、自作関数についての説明です。皆さんが望む説明になればいいかなと思っています。
自作関数のrranges()関数は、まず、引数にchar *strを渡します。
次に関数の中身の処理を説明します。
int i,j;の変数を宣言します。
for文で、iを0に初期化、jに初期値としてstrlen(str)-1を代入します。
i < jなら、iを1ずつ加算、jを1ずつ減算します。
その後にfor文の中の処理で、まずchar tを宣言しておきます。ここでtを宣言する理由は文字列を反転させるために、空の文字列が必要だからです。
空のtにstrを代入します(ここではstrの添え字iは、ユーザーが入力した先頭の文字を表します。)。
次に、空のstrにstr[j]を代入します。(ここで言うstr[j]はabcのcの文字)
最後に、一番最初に代入した。ユーザーが入力した先頭文字(ここではa)を空のstr[j]に代入して終了です。
かなり長くなってしまいましたが、いかがですか?私の説明で皆さんは納得しましたか?
これ以上の説明は出来ませんので、勘弁してください。
以上です。
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
ごめんなさい。せっかく説明を書いていただけたのであまり文句はつけたくないのですが、
どうしても気になるので、指摘させていただきます。
添え字がユーザーが入力した先頭の文字を表す、というのはおかしいと思います。
たしかにi==0の時はstrは先頭の文字になりますが、iの値は(多くの場合)変化します。
strは空ではありません。C言語である変数の値を別の変数に代入しても、元の変数の値が消えることはありません。
さらに、C言語の変数には「空」を示すnullのようなものは無く、未初期化の変数は「空」ではなく「ゴミが入っている」と言えます。
(NULLはポインタの一種であり、nullとは違うと思います)
上と同様に、str[j]は空ではありません。
さらに、ここでいきなり終了するというのも不自然です。
例えば、ユーザーの入力が"abcde"だったらどうなりますか?
どうしても気になるので、指摘させていただきます。
ここは大丈夫だと思います。samusu0905 さんが書きました:int i,j;の変数を宣言します。
for文で、iを0に初期化、jに初期値としてstrlen(str)-1を代入します。
初期化した直後に減算するわけではありません。samusu0905 さんが書きました:i < jなら、iを1ずつ加算、jを1ずつ減算します。
空の文字列は必要ありませんし、tは文字列ではなく文字(を入れる変数)です。samusu0905 さんが書きました:その後にfor文の中の処理で、まずchar tを宣言しておきます。ここでtを宣言する理由は文字列を反転させるために、空の文字列が必要だからです。
samusu0905 さんが書きました:空のtにstrを代入します(ここではstrの添え字iは、ユーザーが入力した先頭の文字を表します。)。
添え字がユーザーが入力した先頭の文字を表す、というのはおかしいと思います。
たしかにi==0の時はstrは先頭の文字になりますが、iの値は(多くの場合)変化します。
samusu0905 さんが書きました:次に、空のstrにstr[j]を代入します。(ここで言うstr[j]はabcのcの文字)
strは空ではありません。C言語である変数の値を別の変数に代入しても、元の変数の値が消えることはありません。
さらに、C言語の変数には「空」を示すnullのようなものは無く、未初期化の変数は「空」ではなく「ゴミが入っている」と言えます。
(NULLはポインタの一種であり、nullとは違うと思います)
samusu0905 さんが書きました:最後に、一番最初に代入した。ユーザーが入力した先頭文字(ここではa)を空のstr[j]に代入して終了です。
上と同様に、str[j]は空ではありません。
さらに、ここでいきなり終了するというのも不自然です。
例えば、ユーザーの入力が"abcde"だったらどうなりますか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
オフトピック
波状攻撃になるといけないので、私はこのトピックでの指摘はやめにします。
というか私の質問には一切触れていただけなかったのと、「勘弁してください」と自ら学習するのを放棄されてしまったのでこれ以上は無駄と思います。
別に放棄していただいても私は一向にかまいませんが、困るのは質問者さん自身ですよ。
というか私の質問には一切触れていただけなかったのと、「勘弁してください」と自ら学習するのを放棄されてしまったのでこれ以上は無駄と思います。
別に放棄していただいても私は一向にかまいませんが、困るのは質問者さん自身ですよ。
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
今は説明できなくても、じっくり学習していつか説明できるようになればいいのですが…。samusu0905 さんが書きました:これ以上の説明は出来ませんので、勘弁してください。
できるようになるかならないか、samusu0905さんができるようになりたいかは、私にはわからないですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C言語の練習問題で文字列を反転して並び替える関数を作る処理について
>> i < jなら、iを1ずつ加算、jを1ずつ減算します。
>初期化した直後に減算するわけではありません。
指摘や質問だけだと 攻撃 と捉えてしまう方もおられるようですので
とりあえず上記引用の件(iやjが加減算されるタイミング)については
こんな感じですよー,という.
↓whileで書くとこうなる
>初期化した直後に減算するわけではありません。
指摘や質問だけだと 攻撃 と捉えてしまう方もおられるようですので
とりあえず上記引用の件(iやjが加減算されるタイミング)については
こんな感じですよー,という.
void rranges(char *str)
{
int i,j;
for( i=0, j = strlen(str)-1; i < j; i++, j--)
{
char t;
t = str[i], str[i] = str[j], str[j] = t;
}
}
void rranges( char *str )
{
int i,j;
//↑コードでのfor( α; β; γ ) のαの部分
i=0;
j=strlen(str)-1;
while( i<j ) //判定式βの部分
{
char t;
t = str[i], str[i] = str[j], str[j] = t;
//γの部分
i++;
j--;
}
}
オフトピック
まぁ,このfor()を実際に書いていることと,(失礼ながら)これまでの質問者様の文章の具合 から想像するに,
そういうことはわかっているけど 説明の文面の方がおかしい ということになっているのではないかと思いますが…
そういうことはわかっているけど 説明の文面の方がおかしい ということになっているのではないかと思いますが…