🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
標準入力

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

C#

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

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

Q&A

解決済

2回答

8079閲覧

文字列を枠で囲む(C#)

covakaiser

総合スコア3

標準入力

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

C#

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

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

0グッド

0クリップ

投稿2021/01/17 17:29

編集2021/01/17 17:59

前提・実現したいこと

標準入力で出力する文字列を+の枠で囲む装飾をするプログラムを書きたいです。


+++++++
+super+
+++++++
↑のようになるプログラムを書きたいです。

言語はC#です。
何か解答例などあれば教えてください。

該当のソースコード

using System; class Program { static void Main() { string line = Console.ReadLine(); int number = line.Length; //文字数 string[][] team = new string[3][]; for(int i = 0; i < team.Length; i++) { team[i] = new string[number + 2]; } string[] moji = line.Split(""); for(int i = 0; i < team.Length; i++) { for(int j = 0; j < team[i].Length; j++) { if(team[i][j] == null && team[i][j] == null) { Console.Write("+"); } Console.Write(team[i][j]); } Console.WriteLine(); } } }

試したこと

とりあえず"+"を表示させようと思いこのようにコードを書きました。
ここから上記の例のように表示させるには、入力される文字列を1文字ずつ分割し、配列に格納しなければならないと考えました。そこで、moji配列に入力された文字列をSplitで分けて入れてみたのですがここからどうすれば良いか分からなくなり、質問をしました。

補足情報(FW/ツールのバージョンなど)

参考にしたサイト
https://android-java.hatenablog.jp/entry/2017/05/30/214235

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

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

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

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

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

guest

回答2

0

ベストアンサー

ここから上記の例のように表示させるには、入力される文字列を1文字ずつ分割し、配列に格納しなければならないと考えました。

んな面倒な事しなくても

csharp

1using System; 2 3namespace ConsoleApp1 4{ 5 internal class Program 6 { 7 private static void Main(string[] args) 8 { 9 string line = Console.ReadLine(); 10 Console.WriteLine(new string('+', line.Length + 2)); 11 Console.WriteLine($"+ {line} +"); 12 Console.WriteLine(new string('+', line.Length + 2)); 13 } 14 } 15}

でいいじゃん。

投稿2021/01/17 18:28

編集2021/01/17 18:32
gentaro

総合スコア8947

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

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

退会済みユーザー

退会済みユーザー

2021/01/20 00:32 編集

多分マルチバイト文字使うとズレますね。まあ、そこまで要求されるかどうかは知りませんが。
Zuishin

2021/01/18 04:57

スペースが入っているので 1 バイトでもズレると思いますし、フォントとグリフによっては工夫のしようもありませんが、まあ意図は伝わるでしょう。多バイト文字は Length がバイト数でなく文字数なのでフォント次第ですが、「????田さん」まで考えると難しいですね。
gentaro

2021/01/19 13:50

マルチバイト文字でズレないようにするなら出力するコンソールに等幅フォントを強制する方法とかまで実装が必要になりそうですけど、この質問文からそのような要件まで読み取れませんし、それが可能かも含めてすぐには回答できそうにないんで、もしそのような回答が望ましいと思ってらっしゃるなら後学のためにその回答を付けてみて欲しいですが。
退会済みユーザー

退会済みユーザー

2021/01/19 23:59

既にBAはついてるので質問者さんは満足されてるようですし、まあ単なる補足情報です。
gentaro

2021/01/20 00:15

補足であれば2バイト文字じゃなくてマルチバイト文字と表現するべきだろうと思いましたが、単純にどうやったら実現可能なのかというのは聞いてみたいですね。ぱっと思いつきませんでした。
退会済みユーザー

退会済みユーザー

2021/01/20 00:32

そうですね、マルチバイト文字に訂正しておきます。
Zuishin

2021/01/20 00:50 編集

「1」はマルチバイト文字ですが、フォントによっては半角の「W」より幅が狭くなることもあります。このご時世、バイト数は目安にならないんじゃないでしょうか。 固定フォントと昔ながらのいわゆる全角文字と半角文字の範囲のみ扱って実用上の解とするのでなければ、使用するフォントの各グリフの幅を計算して誤差が少なくなるよう調整するか、自前で描画するかくらいしか思いつきません。
gentaro

2021/01/20 00:57

@Zuishinさん そうですね。 幅が均一であるという前提に立てないから、やるとしてもクソ面倒くさそうだし、そこまでやるなら「文字を文字で装飾する」という発想をやめた方が良さそうだ、という結論にしかならなそう。 自前で描画するならもうそれ画像でいいじゃん、としか思わないでしょうねぇ…。
guest

0

こんばんは。

イメージ説明

実現したい事を実現するならこういう風に分解して考えれば良いかなと。
moji配列に分解して云々は要件を難しく考えすぎだと感じました。

イメージ図の黄色枠の文字列を作って、標準入力の文字列の前後に標準出力してみると目的が達成できるかと思います。

試しに書いてみたコード。出力部分はあえて削っていますが要件は満たせていると思います。

cs

1using System; 2using System.Text; 3 4class Program 5{ 6 static void Main() 7 { 8 string line = Console.ReadLine(); 9 10 StringBuilder sbHeaderFooter = new StringBuilder(); 11 sbHeaderFooter.Append("+"); 12 for (int i = 0; i < line.Length; i++) 13 { 14 sbHeaderFooter.Append("+"); 15 } 16 sbHeaderFooter.Append("+"); 17 string headerFooter = sbHeaderFooter.ToString(); 18 19 // TODO 【headerFooter】と【line】を出力してみよう 20 } 21}

頑張ってください。

投稿2021/01/17 18:30

編集2021/01/17 18:32
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問