質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

2113閲覧

標準入力からの文字と数字を与えられた整数値分出力の仕方

BRAK

総合スコア98

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2020/06/07 12:32

編集2020/06/08 13:29

標準入力からの文字と数字を与えられた整数値分出力の仕方

初めに整数値nを標準入力し、そのあと半角スペース区切りで文字と数字が一つの文字として入力されます。
文字を出力しそのあと文字で入力された数字を数字へ変換したあとにプラス1した数を整数値分、出力するコードの書き方がピンときません。

C#

1コード 2public class Hello 3{ 4 public static void Main() 5 { 6 int N = Int32.Parse(Console.ReadLine());//整数を入力 7 8 for (int i = 0; i <= N; i += 2) 9 { 10 string mozikazu = Console.ReadLine();//(例えばab 1, cd 2, ef 3)文字と数を半角スペース区切りで整数値分(3とする)入力 11 12 string[] array = mozikazu.Split(' ');//改行スペースを利用して文字と数を分けてみた 13 14 Console.Write(array[i] + " "); 15 16 for (int j = 1; j <= N; j += 2) 17 { 18 int kazu = Int32.Parse(array[j]);//文字型の数だけを数字へ変換 19 Console.WriteLine(kazu + 1); 20 } 21 } 22 } 23}

期待した出力結果は

入力された文字と数字+1で、この数字というのは文字で入力された数字を数字に直した後に+1した数です。

例えば、int Nに3が入力される。そのあと、文字とスペースを空けて数字が順に3つ入力されます(ab 1, cd 2, ef 3)
最後に文字(ab,cd,ef)と数字(1,2,3)で分けて、文字はそのまま、数字はプラス1して出力します.
期待している出力結果は
ab 2
cd 3
ef 4
という感じです。

このアドバイスをもらって直したコードは今のところ初めの文字と数字+1は出力されますがそのあとは配列外エラーになるという感じでコードを直している途中です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2020/06/07 12:45

添え字を固定していればループしてもずっと同じですが大丈夫ですか? このあたりは「IT系のC#については初心者」とは関係ないと思いますが・・・ また、質問にあるコードですとコンパイルエラーとなりますが、合ってますか?
BluOxy

2020/06/07 12:48 編集

入力と出力を記載してください。 「この文字」とは、「ab 1, cd 2, ef 3」のことで、「プラス1した数」というのは「ab 2, cd 3, ef 4」でしょうか。 また、整数値nを入力する必要性もわからないので、記載してください
BRAK

2020/06/07 12:56

最初の整数値Nのところは記載するときにわかりやすい文字に変えたのでエラーになってましたね。 この文字じゃなくてこの数字です。なのでSplitして配列化させたときの(1,2,3)です。
BRAK

2020/06/07 13:00

YAmaGNZさんへ、 添え字を固定していればループしてもずっと同じですが大丈夫ですか? 大丈夫じゃないので質問しています。今はこれで固定してさっき言っていたエラーにならないようにしています。
BRAK

2020/06/07 13:01

ちょっと質問の仕方が悪いですね。書き方を変えます。
BRAK

2020/06/07 13:14

すみません、array[i]で普通に文字は出力されました。文字と文字型の数字が出力されると勘違いしていました
BRAK

2020/06/07 13:16

なので数字のところを整数値分出力させるようにするかなので考えてみます。
fana

2020/06/08 01:28

正直,質問文が何言ってるかわからないので, 入力とそれに対する出力 の例を,何例か添えると良いのではないかと思います.
BRAK

2020/06/08 13:29

アドバイス通り例えを書きました。
BRAK

2020/06/08 14:56

解き方わかったらコード載せます。
guest

回答3

0

ベストアンサー

~~希望する出力がわからないんで、勘ですが、~~こんな感じでどうですか?
修正後のコード

C#

1 static void Main(string[] args) { 2 int N = Int32.Parse(Console.ReadLine());//整数を入力 3 string mozisuzi = Console.ReadLine();//(例えばab 1, cd 2, ef 3)文字と数字を半角スペース区切りで整数値(3とする)分入力 4 5 string[] array = mozisuzi.Split(',');//まずは「,」で区切ってやる 6 for (int i = 0; i < N; i++) { 7 string pair = array[i].Trim();//前後にある余計なスペースを削除 8 string[] array2 = pair.Split(' ');//その「ab 1」となってるので「ab」と「1」に区切ってやる 9 int suzi = int.Parse(array2[1]) + 1;//文字型の数だけを数字へ変換し+1してやる 10 11 Console.WriteLine(array2[0] + " " + suzi);//出力 12 } 13 Console.Read(); 14 }

修正前のコード

C#

1 static void Main(string[] args) { 2 string mozisuzi = Console.ReadLine();//(例えばab 1, cd 2, ef 3)文字と数字を半角スペース区切りで整数値(3とする)分入力 3 4 string[] array = mozisuzi.Split(' ');//改行スペースを利用して文字と数字を分けてみた 5 string output = ""; 6 for (int i = 0; i < array.Length; i++) { 7 int suzi = 0; 8 if (Int32.TryParse(array[i], out suzi)) {//文字型の数だけを数字へ変換 9 output += (suzi+1); 10 } else { 11 output += array[i]; 12 } 13 if (i < array.Length - 1) output += " "; 14 } 15 Console.WriteLine(output); 16 Console.Read(); 17 }

投稿2020/06/07 15:12

編集2020/06/08 14:07
Hey_CH

総合スコア437

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BRAK

2020/06/07 15:59

ありがとうございます。 明日、参考にしてコードをなおしてみます。
Hey_CH

2020/06/07 16:00

はい、頑張ってください
BRAK

2020/06/08 13:35

朝、そのままのコードで実行してみて、今再度実行したのですが、1つのみの文字列で入力して実行するというコードだったのですね。新しい知恵が一つ増えました。 ただ、私が考えている処理ではないので、初めに整数値入力してその数分の処理ができるか試そうと思います
Hey_CH

2020/06/08 13:46

あぁ、 int N = Int32.Parse(Console.ReadLine());//整数を入力 これは必要で書いてたコードだったんですね、消しちゃってすいませんでした。
BRAK

2020/06/08 14:04

このNが邪魔でfor分がうまく通ってくれないです。
Hey_CH

2020/06/08 14:12

Nが文字列と数値のペアの数を表すのであれば、不要だと思うんですけどね~ とりあえず回答を修正しましたのでご確認ください。
BRAK

2020/06/08 14:50

今確認してみました。Nを2にするとやっぱり配列外エラーになります。
BRAK

2020/06/08 14:55

とある問題の回答がない練習問題なのですが、よくわからないので教師に連絡して解き方聞こうと思います。 コードまで考えてくださってありがとうございます。
Hey_CH

2020/06/08 15:01

僕の考えている入力と出力ではN=2の時も大丈夫なんですけどね~申し訳ない。
guest

0

配列の添え字を1,3,5・・・としたいのなら、for文の初期値と増加分を変えればいいのではないですか?

投稿2020/06/07 13:21

YAmaGNZ

総合スコア10222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BRAK

2020/06/07 13:23

ありがとうございます。 for分にfor分を重ね掛けして文字と数字で処理を分けるって事ですね。 ちょっとやってみます。
YAmaGNZ

2020/06/07 13:26

いえ、文字に関する言及がないので数字のみ処理するという前提での回答です。 文字も何かしら処理したいのであれば、0,2,4・・・とループして、数字はi+1で処理する等してはどうですか?
BRAK

2020/06/07 14:12

文字をループっていうのはわかりますが、数字をi+1とはint kazu = Int32.Parse(array[i]);のarrayをということですか? その場合ですと文字列としか出力されないですね。 kazu + 1 = kazu1になります。kazu = 1とすると、11になります。
BRAK

2020/06/07 14:15 編集

今forにforを重ねてコードを書いていて ``` コード public class Hello { public static void Main() { int N = Int32.Parse(Console.ReadLine()); for (int i = 0; i <= N; i += 2) { string mozikazu = Console.ReadLine(); string[] array = mozikazu.Split(' '); Console.Write(array[i] + " "); for (int j = 1; j <= N; j += 2) { int kazu = Int32.Parse(array[j]); Console.WriteLine(kazu + 1); } } } } ``` ここまで書きましたが、配列外エラーになります。考えてる途中です。
YAmaGNZ

2020/06/07 15:04

入力をSplitで分けると mojikazu[0]="abc" mojikazu[1]="12" mojikazu[2]="def" mojikazu[3]="34" となるのは分かりますか? 「文字と数字で処理を分けるって事」というのは文字の部分(添え字が0,2)も処理するということではないのですか? 私はそのように取ったので、文字の部分の添え字(0,2・・・)でループを回して、文字部分はmojikazu[i]として数字部分はmojikazu[i+1]とすればいいのではないですか?という提案です。 Int32.Parse(array[i])を変えろなんて言ってません。配列の添え字の話しかしていません。 ゲームだろうが何だろうが配列は変わりませんよ
YAmaGNZ

2020/06/07 15:06

>Int32.Parse(array[i]);のarrayをということですか? >その場合ですと文字列としか出力されないですね。 >kazu + 1 = kazu1になります。kazu = 1とすると、11になります。 これも意味が分かりません。どのようなコードを書いてこうなってしまうって言っていますか?
BRAK

2020/06/07 15:27

→どのようなコードを書いてこうなってしまうって言っていますか? int kazu = Int32.Parse(array[j]) このarray [i]をi+1とした結果 1に1足して11となった次第です。 これだと数字化出来ないと言った次第です。
BRAK

2020/06/07 15:31

あと、文で書いてなかったので申し訳ないのですが、期待した出力結果というのが 文字と数字+1で、この数字というのは文字化した数字を数字に直した後に+1した数です。なので、Parseで数字化させてるという感じです。
BRAK

2020/06/07 15:42

int kazu = Int32.Parse(array[j])のarray[j]にのiに+1した際に数字化されないで+されるのは、"1"+1って事でiが+1された数の配列の位置だと勘違いしてました。 あと、Splitで分けたあとの配列については理解出来ています。 →文字の部分(添え字が0,2)も処理するということではないのですか? はい、そうです。 ですので、改めて期待した出力結果は 文字と数字+1で、この数字というのは文字化した数字を数字に直した後に+1した数です。
guest

0

  1. 文字列として1行分入力
  2. スペースを区切りとして、文字列を分割
  3. 分割した文字列をそれぞれ、
  4. 数値文字列であれば数値の処理を
  5. そうでなければそれなりの処理を
  6. 分割した数ぶんだけループ

という手順で処理しましょう

投稿2020/06/07 12:50

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問