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

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

新規登録して質問してみよう
ただいま回答率
85.46%
C#

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

Q&A

解決済

2回答

1306閲覧

長さ5以上、英数字を含む、同じ文字を3つ以上連続で使用してはならない文字列

jing02

総合スコア2

C#

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

0グッド

0クリップ

投稿2021/09/05 00:19

編集2021/09/05 02:27

条件・目的

・長さが5以上
・英字と数字の両方を含む必要が有る
・同じ文字を 3 つ以上連続で使用することはできない

入力される値
t

1 ≦ (t の長さ) ≦ 30
文字列 t は半角英字あるいは半角数字で構成された文字列
英字の大文字と小文字は区別する必要はない
文字列が全ての条件を満たす場合のみ"success"
それ以外は全て"fail" と出力する

作成したコード

using System; using System.Text.RegularExpressions; class Program { static bool sameCharactersOverThree(string line) { int charCount = 1; for (int i = 0; i < line.Length - 1; i++) { char c = line[i]; if(c == line[i + 1]) { charCount++; if (charCount >= 3) { return false; } } } return true; } static void Main() { string line = Console.ReadLine(); Regex re = new Regex(@"[0-9]"); Regex ge = new Regex(@"[A-z]"); if (sameCharactersOverThree(line) && re.Matches(line).Count != 0 && ge.Matches(line).Count != 0 && line.Length >= 5) { Console.WriteLine("success"); } else { Console.WriteLine("fail"); } } }

###エラーメッセージ(変更前)
Main.cs(22,8): error CS1525: Unexpected symbol static' Main.cs(22,16): error CS1547: Keyword void' cannot be used in this context
Main.cs(22,24): error CS1525: Unexpected symbol (' Main.cs(41,0): error CS1525: Unexpected symbol }'

###追記
修正したらコードが動きました。皆さん本当にありがとうございます。エラーメッセージをしっかり読むべきでした。

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

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

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

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

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

Zuishin

2021/09/05 00:25

paiza.io を使うからです。 Visual Studio を使いましょう。
退会済みユーザー

退会済みユーザー

2021/09/05 00:54 編集

問題・課題は何なのですか? ある環境(?)では全く動かないからそれを何とかしたい? Visual Studio 2019 でのエラーを何とかしたい? 正規表現を知りたい?
dodox86

2021/09/05 00:49

このご質問には2つのテーマがあって 1. コンパイルエラーを取る。>正しい文法でコードを書き、とにかく動くようにする。 2. 「長さ5以上、英数字を含む、同じ文字を3つ以上連続で使用してはならない文字列」を検出する。 がありますが、質問としては1. で良いですか? こういうご質問で往々にしてあるのが「コンパイルエラーは無くなりましたが、答えが間違っています。どうしたらよいですか?」と続くことです。コンパイルエラーがあるので何とも、ですが"aa1bb2aa3"のような文字列で「3つ以上連続する文字」を正しく検出できていないと思います。
jing02

2021/09/05 00:57

はい、質問の内容は1.です。文字列が一つ与えられるのですが、それが条件を満たしているかを判定するプログラムを作成したいのです。質問が曖昧で申し訳ありません。
Zuishin

2021/09/05 01:00

paiza.io を使うからです。 あと、文字を読まないから。
jing02

2021/09/05 01:01

例えば、"8Mw2ehvvvvy"のような文字列では英数字を含み、5文字以上なのでこれらの条件は満たしていますが3つ以上の同じ文字を含んでいるため"fail"となります。全ての条件を満たす場合のみ"success"と表示するようにしたいです。ただ、まずはやはりコンパイルエラーをどうにかしなくてはなりません。
Zuishin

2021/09/05 01:02

どこで見つけてきたんだこの変なテンプレート。
退会済みユーザー

退会済みユーザー

2021/09/05 01:04

> はい、質問の内容は1.です。 質問文を編集してその旨書いてください。
Zuishin

2021/09/05 01:25 編集

> Main.cs(22,8): error CS1525: Unexpected symbol static' エラーメッセージにはここで static は使えないと、こう書いてある。 ならば質問のタイトルはこれを問うものでなければならない。 > 長さ5以上、英数字を含む、同じ文字を3つ以上連続で使用してはならない文字列 現在のタイトルはこれ。 直面している問題に何の関係もない。 だから質問の意味を問われている。 結局、初心者かどうかではなく、国語力の問題。 親切に行番号まで書いてあるのに、どこに問題があるかを把握できてない。 この程度の問題なら、中学生の初心者でも自分で余裕で直せる。
退会済みユーザー

退会済みユーザー

2021/09/05 02:39

日本語レベルでダメな質問ということが認識できないのかな?
guest

回答2

0

ベストアンサー

sameCharactersOverThree 関数の「中」に static void Main() を定義しているから、

Text

1Main.cs(22,8): error CS1525: Unexpected symbol 'static void' cannot be used in this context

つまり「static void をこんなところに書くわけがない」と教えてくれています。メンバ関数を「メンバ関数としての所定の位置」に書きましょう。

投稿2021/09/05 01:05

bboydaisuke

総合スコア5277

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

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

dodox86

2021/09/05 01:20

質問と直接関係ない話になりますが、 > メンバ関数を「メンバ関数としての所定の位置」 「メンバー関数」はC++での呼び方で、C# では一般に「メソッド」と呼ぶと思います。teratailの過去質問回答で良いものがありましたので、付記しておきます。 「メンバ変数」「メンバ関数」等の「メンバ」という名前の由来は? https://teratail.com/questions/207907
jing02

2021/09/05 02:39

ご回答ありがとうございます。
guest

0

こんな感じでええかのう? ちな同じやつここにも上げといたで。

C#

1using System; 2using System.Text.RegularExpressions; 3 4class Program { 5 6 private static string check(string text) { 7 8 // 文字列 text は 5文字以上である。 9 bool check1 = text.Length >= 5; 10 11 // 文字列 text は アルファベットを含む。 12 bool check2 = Regex.IsMatch(text, "[a-zA-Z]"); 13 14 // 文字列 text は 数字を含む。 15 bool check3 = Regex.IsMatch(text, "[0-9]"); 16 17 // 文字列 text は 同じ文字の3文字以上の繰り返しを含んでいない。 18 bool check4 = !Regex.IsMatch(text, "(.)\1{2,}"); 19 20 // 上記の全てを満たすかどうかのフラグ(すべて満たせばTrue) 21 bool checkAll = check1 & check2 & check3 & check4; 22 23 return(checkAll ? "success" : "fail"); 24 } 25 26 public static void Main (string[] args) { 27 Console.WriteLine(Program.check("a123")); // 5文字未満なのでfail 28 Console.WriteLine(Program.check("1234567")); // アルファベットを含まないのでfail 29 Console.WriteLine(Program.check("AbcDef")); // 数字を含まないのでfail 30 Console.WriteLine(Program.check("abcZZZ12")); // 同じ文字'Z'が3回繰り返されているのでfail 31 Console.WriteLine(Program.check("A77777")); // 同じ文字'7'が5回繰り返されているのでfail 32 Console.WriteLine(Program.check("xAA99")); // 5文字以上、数字とアルファベットを含み、同じ文字の繰り返しは3回未満なのでsuccess 33 } 34}

ほんで、上のコードの check(string text) を詰めて書くと、こないな感じ

C#

1 private static string check(string text) { 2 return ( 3 text.Length >= 5 && 4 Regex.IsMatch(text, "[a-zA-Z]") && 5 Regex.IsMatch(text, "[0-9]") && 6 !Regex.IsMatch(text, "(.)\1{2,}") ? "success" : "fail"); 7 }

ここにも上げといたで。

投稿2021/09/05 01:43

編集2021/09/05 02:05
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Zuishin

2021/09/05 02:04

質問者のレベルから言っても、もともとの問題が正規表現の練習問題には思えませんが、何かの嫌がらせですか?
Zuishin

2021/09/05 02:09

仮に正規表現の練習問題だとしても、自力で解いた人にしか利益を与えない練習問題の利益を丸々抜いてしまう意味がよくわかりません。 何の役にも立たないプログラムが一つできただけです。 この質問で問われているのは、エラーの原因だと思います。
jing02

2021/09/05 02:39

ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問