文字列を交互に
Re: 文字列を交互に
> キーボードから2つの文字列を入力してそれを交互に表示
というのを素直に読めば,
入力が
2つの文字列 "Cat" と "Dog" だった場合,
Cat Dog Cat Dog Cat Dog ... (何回続けるのか知らんが)
という表示をする,という話と思うのだが…
> 実行結果例 st ABC st1 ZXW st2 AZBXCW
といっているからどうやら解釈が違う様子.
"ABC" と "ZXW" が入力された際に,これらの先頭側から1文字ずつ取り出して表示していく話になっていると見える.
それで合ってる?
(2つの文字列の長さが違ったらどうするんだ?)
---
> 文字列は3つ必要になりますよね?
必要かどうかは要件次第であろう.
「交互にどうのこうのした結果の文字列データを作れ.そしてそれを表示しろ.」という話なのであれば必要だろうけど,
「交互にどうのこうのした表示を行え.」というだけであれば,とにかく表示すれば良いのであって,一旦結果を作る必要は無いであろう.
---
> あとfor文を使い交互にするやり方教えてほしいです。
「そこをどうやればいいのかを考えろ」という趣旨の問題であろうと思うので,そこまで他者に求めるのあれば,あなたがこの問題に取り組む意味は全く無いものと思える.
というのを素直に読めば,
入力が
2つの文字列 "Cat" と "Dog" だった場合,
Cat Dog Cat Dog Cat Dog ... (何回続けるのか知らんが)
という表示をする,という話と思うのだが…
> 実行結果例 st ABC st1 ZXW st2 AZBXCW
といっているからどうやら解釈が違う様子.
"ABC" と "ZXW" が入力された際に,これらの先頭側から1文字ずつ取り出して表示していく話になっていると見える.
それで合ってる?
(2つの文字列の長さが違ったらどうするんだ?)
---
> 文字列は3つ必要になりますよね?
必要かどうかは要件次第であろう.
「交互にどうのこうのした結果の文字列データを作れ.そしてそれを表示しろ.」という話なのであれば必要だろうけど,
「交互にどうのこうのした表示を行え.」というだけであれば,とにかく表示すれば良いのであって,一旦結果を作る必要は無いであろう.
---
> あとfor文を使い交互にするやり方教えてほしいです。
「そこをどうやればいいのかを考えろ」という趣旨の問題であろうと思うので,そこまで他者に求めるのあれば,あなたがこの問題に取り組む意味は全く無いものと思える.
Re: 文字列を交互に
> for文を使い
「forを使ってやれ」という特別な指示があるのでもなければ,そんな実装詳細のところに変にこだわらない方が楽だと思うけど.
まずは「具体的にどう実装するか?」という点は度外視して,処理アルゴリズムを考えるべき.
「forを使ってやれ」という特別な指示があるのでもなければ,そんな実装詳細のところに変にこだわらない方が楽だと思うけど.
まずは「具体的にどう実装するか?」という点は度外視して,処理アルゴリズムを考えるべき.
Re: 文字列を交互に
1文字ずつ交互に織り込んだような結果になるやつをやりたいのだとして,それがすぐにできそうにないなら,
とりあえず 交互に織り込む ところは無しの状態で,
単に1文字ずつ表示することをやってみるべきであろう.
これができなければ,より難しい処理をやれるはずもないので.
例えば "ABC" と "12345" の2つが入力されたときに,1行に1文字ずつ
A
B
C
1
2
3
4
5
とか表示することをやってみると良かろう.
その経験を経たうえで,本来の問題を考えてみれば,すんなり解けるのではないかと想像する.
とりあえず 交互に織り込む ところは無しの状態で,
単に1文字ずつ表示することをやってみるべきであろう.
これができなければ,より難しい処理をやれるはずもないので.
例えば "ABC" と "12345" の2つが入力されたときに,1行に1文字ずつ
A
B
C
1
2
3
4
5
とか表示することをやってみると良かろう.
その経験を経たうえで,本来の問題を考えてみれば,すんなり解けるのではないかと想像する.
Re: 文字列を交互に
オフトピック
以上は,自分で取り組むつもりのある人に対してのアドバイスのつもりであるが,
「いや,そういうのはいらないから,そのままどこぞに提出できる形のコードだけよこせや」というようなタイプの人には,こういうのはただただ迷惑であろう.
というわけで,課題っぽい雰囲気の話についてこういう場所で質問する場合には,
どっち側のスタンスなのかを明確に述べるとミスマッチが無くて良いのではないかと思う.
「いや,そういうのはいらないから,そのままどこぞに提出できる形のコードだけよこせや」というようなタイプの人には,こういうのはただただ迷惑であろう.
というわけで,課題っぽい雰囲気の話についてこういう場所で質問する場合には,
どっち側のスタンスなのかを明確に述べるとミスマッチが無くて良いのではないかと思う.
Re: 文字列を交互に
何を入力したときにそうなってほしいかを具体的に述べてください。実行結果例 st ABC st1 ZXW st2 AZBXCW
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 文字列を交互に
for分の文法は
となります。
例えば0~9までの数を表示したい場合のコードは以下になります。
最初に書いたfor分の文法にそって説明すると
i=0が初期化で変数iを0にするということです。
i<10が条件でiが10よりも小さい場合、実行する処理が実行されます。
i=i+1が変化式になります。
もっと噛み砕いて説明すると
① iに0を設定する。
② iが10よりも小さいかどうかチェックする。
③iに1を加算する。
④②の処理に戻る。
①~④までの処理がiが10よりも小さい間、つまりiの値が10まで実行されます。
というのがfor文の文法となってます。
それでご質問の問題ですが
2つの文字列なのでscanf()を2つ使います。
今までの説明をコードにすると
上記になります。
「交互にする処理」はもう少し詳しく説明して頂かないと分かりませんのでそこはご自分で実際に組んで貰って
また分からなければ何がわからないのかを詳しく説明して上で質問しれ貰えればよいかと思います。
グダグダになってしまいましたが以上です。
となります。
例えば0~9までの数を表示したい場合のコードは以下になります。
#include <stdio.h>
int main() {
int i;
for (i=0; i<10; i=i+1) {
printf("i=%d\n", i)
}
return 0;
}
i<10が条件でiが10よりも小さい場合、実行する処理が実行されます。
i=i+1が変化式になります。
もっと噛み砕いて説明すると
① iに0を設定する。
② iが10よりも小さいかどうかチェックする。
③iに1を加算する。
④②の処理に戻る。
①~④までの処理がiが10よりも小さい間、つまりiの値が10まで実行されます。
というのがfor文の文法となってます。
それでご質問の問題ですが
まず、キーボードから文字列を取得するにはscanf()という関数を使います。キーボードから2つの文字列を入力してそれを交互に表示したいのです。
2つの文字列なのでscanf()を2つ使います。
今までの説明をコードにすると
#include <stdio.h>
int main()
{
char st[256];
char st1[256];
char st2[256];
printf("1.なにか文字列を入力してください。");
scanf("%s", st);
printf("2.なにか文字列を入力してください。");
scanf("%s", st1);
for (初期化; 条件式; 変化式) {
//ここに「交互にする処理」を入れる。
}
return 0;
}
「交互にする処理」はもう少し詳しく説明して頂かないと分かりませんのでそこはご自分で実際に組んで貰って
また分からなければ何がわからないのかを詳しく説明して上で質問しれ貰えればよいかと思います。
グダグダになってしまいましたが以上です。
ボールを違うところに投げてたらご指摘して頂けると嬉しいです(o_ _)o
Re: 文字列を交互に
すいません、ちょっと間違っていたので修正しますね。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓もっと噛み砕いて説明すると
① iに0を設定する。
② iが10よりも小さいかどうかチェックする。
③iに1を加算する。
④②の処理に戻る。
もっと噛み砕いて説明すると
① iに0を設定する。
② iが10よりも小さいかどうかチェックする。
③iに1を加算する。
⑤printf()でiの値を表示する。
⑥②の処理に戻る。
ボールを違うところに投げてたらご指摘して頂けると嬉しいです(o_ _)o
Re: 文字列を交互に
はい、ご理解いただいた通り、2つの文字列を交互に表示する場合、3つの文字列が必要になります。1つ目の文字列には最初の文字列を格納し、2つ目の文字列には2番目の文字列を格納し、3番目の文字列には交互に格納された文字列を格納します。
以下は、forループを使って2つの文字列を交互に表示する例です。
この例では、fgetsを使用して2つの文字列を入力し、3つの文字列を宣言しています。ループの開始時に、変数i、j、kを0に初期化します。iは1つ目の文字列の現在の位置を示し、jは2番目の文字列の現在の位置を示し、kは交互に格納された文字列の現在の位置を示します。whileループを使用して、stとst1の各文字を交互にst2に格納します。最後に、stまたはst1の残りの文字がst2にコピーされ、st2にnull終端文字が追加されます。
この方法を使用すると、交互に表示された文字列を1つの文字列に保存できます。ただし、この例では、fgetsが改行文字を読み取るため、ユーザー入力に改行文字が含まれる場合、結果に改行文字が含まれることに注意してください。
以下は、forループを使って2つの文字列を交互に表示する例です。
#include <stdio.h>
#include <string.h>
int main() {
char st[100], st1[100], st2[200];
int i, j, k;
printf("1つ目の文字列を入力してください:");
fgets(st, sizeof(st), stdin);
printf("2つ目の文字列を入力してください:");
fgets(st1, sizeof(st1), stdin);
i = j = k = 0;
while (st[i] != '\0' && st1[j] != '\0') {
st2[k++] = st[i++];
st2[k++] = st1[j++];
}
while (st[i] != '\0') {
st2[k++] = st[i++];
}
while (st1[j] != '\0') {
st2[k++] = st1[j++];
}
st2[k] = '\0';
printf("交互に表示された文字列は:%s\n", st2);
return 0;
}
この方法を使用すると、交互に表示された文字列を1つの文字列に保存できます。ただし、この例では、fgetsが改行文字を読み取るため、ユーザー入力に改行文字が含まれる場合、結果に改行文字が含まれることに注意してください。
Re: 文字列を交互に
東上海美「
#11>以下は、forループを使って2つの文字列を交互に表示する例です。
コードには、for ではなく while が使ってあったのでw
chatGPT のコピペみみ ?
」
#11>以下は、forループを使って2つの文字列を交互に表示する例です。
コードには、for ではなく while が使ってあったのでw
chatGPT のコピペみみ ?
」
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。