• ベストアンサー

C# 特定文字の数を調べる方法を教えてください。

全体で何文字あるか?ではなく、たとえば、下のような場合、 「P」の文字数はいくつか?というのをコンソールウインドウに 表示できるようにしたいのです。 public static void Main() {  string str= "ABCDEFGGHIJJJKLMNOOPPPPQRSTUUVWXYZ";  {  Console.WriteLine(     + "文字です。");  } }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

class Program {  public static void Main() {   string str= "ABCDEFGGHIJJJKLMNOOPPPPQRSTUUVWXYZ";   int noOfP = System.Array.FindAll(str.ToCharArray(), delegate (char x) { return x == 'P';}).Length;   System.Console.WriteLine( "{0}文字です。", noOfP);  } } # ところでここのカテゴリはC#ではありません。

reokun5785
質問者

お礼

ありがとうございます。 Lengthを使うという漠然としたイメージしかなかったので、 すっきりしました。 さっそく挑戦してみます。 すいませんカテゴリを間違えてしまいました。

reokun5785
質問者

補足

ちなみにですが、下記のようなテキストファイルの内容を 読み込んで、この場合に、同じく合計で「P」がいくつあるか という場合にはどうなりますか? ABC.txt ABCDEFGGHIJJJKLMNOOPPPPQRSTUUVWXYZ ABCDEFGGHIJJJKLMNOOPPPPQRSTUUVWXYZ ABCDEFGGHIJJJKLMNOOPPPPQRSTUUVWXYZ public string getTitleCount(TextReader tr) { string str = null; while ((str = tr.ReadLine()) != null) { int noOfP = System.Array.FindAll(str.ToCharArray(), delegate(char x) { return x == 'P'; }).Length; Console.WriteLine("{0}文字です。", noOfP); } return str; }

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

> 下記のようなテキストファイルの内容を読み込んで… なにがわからんのかわかりません。 ファイルをオープンしてその関数に食わすだけじゃないの? # カテゴリ違いなので対応はここまで。

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

>読み込んで、この場合に、同じく合計で「P」がいくつあるか >という場合にはどうなりますか? あくまで自分でコードを書く気はないのですね。 まずは foreach を使って自前でカウントする所から始めて下さい。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C#のメンバ変数について

    下記のコードで enterName の変数を static void Resurut() のメソッドへの受け渡しが上手くいかず、どなたか修正点を教えて頂けないでしょうか? 【ソースコード】 static class Program { static string enterName; static int cntWin = 0; //勝利回数 static int cntLose = 0; //敗北回数 static int cntDraw = 0; //引分回数 //ユーザー名の入力 static void Main(string[] args) { string enterName = Console.ReadLine(); Console.WriteLine("ユーザ名を入力してください: {0}", enterName); Start(); Resurut(); } *一部省略 static void Resurut() { if (cntWin > cntLose) { Console.WriteLine("{0}さんの総合勝利です", enterName); } else if (cntLose > cntWin) { Console.WriteLine("CPUの総合勝利です"); } else if (cntWin == cntLose) { Console.WriteLine("引き分けです"); } } }

  • C#の数値の出力について

    下記のコードで cntLose の変数の数値を、コンソールに出力したいのですが、やり方が分からず、どなたか教えて頂けないでしょうか? 【ソースコード】 static class Program { static string userName; static int cntWin = 0; //勝利回数 static int cntLose = 0; //敗北回数 static int cntDraw = 0; //引分回数 //ユーザー名の入力 static void Main(string[] args) { string enterName = Console.ReadLine(); Console.WriteLine("ユーザ名を入力してください: {0}", enterName); userName = enterName; Start(); Resurut(); } static void Janken(ref string myHand) { // Random クラスの新しいインスタンスを生成する Random ran = new System.Random(); //コンピュータの出す手を1以上3以下に設定する。 string[] com = new string[] { "1", "2", "3" }; string con = com[ran.Next(3)]; //コンピュータが勝利した場合 if (((myHand == "1") && (con == "3")) || ((myHand == "2") && (con == "1")) || ((myHand == "3") && (con == "2"))) { Console.WriteLine("LOSE"); cntLose++; //敗北回数に加算 Console.WriteLine("{0}:cntWin勝、CPU:cntLose勝", userName); }

  • C#からC言語で作成したDLLに文字列の配列の受け渡しをする方法を教えて下さい

    初めまして、プログラミング自体経験が初心者なので根本的なところで間違っているかもしれませんがご指摘いただければと思いまして投稿します。 C#のプログラムからC言語で書かれたDLLを使いたいのですが、いくつか分からないことがあります。1つは文字列の配列の受け渡し方法、もう1つはその配列要素の文字列がマルチバイト文字である場合の方法です。 C#側 using System; using System.Runtime.InteropServices; public class MainClass { [DllImport("Cmdll.dll")] public static extern void SampleMethod([In, Out] string[] s, int x); static void Main() {     string[] str1 = new string[2] {"月曜日", "火曜日"};     SampleMethod(str1, n);     for (int i = 0; i < n; i++)       Console.WriteLine("str1[{0}] = {1}", i, str1[i]);   } } C言語側 void __declspec(dllexport) SampleMethod(char *str[], int n) {   int i;   for (i = 0; i < n; i++)     strcat(str[i], "ですね"); } なお、私用する文字を1バイト文字にすると動作しました。 DllImportの使い方も付け焼刃なので使い方が間違っていたらご指摘願えますでしょうか。よろしくお願いいたします。環境はVisual Studio 2008です。

  • C#の変数の範囲

    C#の変数の範囲 質問させてください。 以下は、ネットに掲載されていたC#の問題です。 ~ここから~ 下記のC#のコードを実行した場合、"Hello World!"と二行表示されます。 using System; class Program { static void Main(string[] args) { string s = "Hello"; Action a = () => Console.WriteLine(s); s += " World!"; a(); Console.WriteLine(s); } これを一行目だけ"Hello"と表示される場合、 Action a = () => Console.WriteLine(s);をどう書き換えればよいでしょうか。 1. Action a = () => Console.WriteLine("Hello!"); 2. Action<string> a = (s) => Console.WriteLine(s); 3. Action a = () => Console.WriteLine(t - " World!"); 4. string t = s; Action a = () => Console.WriteLine(t); 5. Action a = () => { string t = s; Console.WriteLine(t); }; ~ここまで~ 正解は4だそうですが、「何故」そうなるかがわかりません。 汗 私としては、1.4.も題意を満たす気がするのですが・・・。 お知恵をお貸しください。 出展 http://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_07/extremecs_07_10.html

  • 文字の表示

    オブジェクトを受け取るメソッド ↓は引数にString型のオブジェクトを指定するプログラムです public class Sample { public static void main(String args[]) { String str = "abcd"; change(str); System.out.println(str); } private static void change(String str) { str = "efgh"; } } 私の中ではefghがでると思っていたんですが・・ これを実行してみると変数strに最初に代入した文字列が表示されるんです! なぜですか? できれば理由を教えてください 回答よろしくお願いします

  • C#について

    using System; class AddressBook: PhoneBook { private string address; public AddressBook() : base() { address=""; } public void Input() { base.Input(); Console.Write("住所?"); string address=Console.ReadLine(); } public void Writes() { base.Write(); Console.WriteLine("住所:{0}",address); } } class kadai62 { public static void Main() { Console.Write("電話帳に入力する人数を入れてください:"); int n = int.Parse(Console.ReadLine()); AddressBook[] pb = new AddressBook[n]; int i; for (i = 0; i < pb.Length; i++) { pb[i] = new AddressBook(); Console.WriteLine("{0}番目を入力してください.", i+1); pb[i].Input(); } Console.WriteLine(); while(true) { Console.Write("どこから探しますか?[1:氏名,2:自宅電話,3:携帯電話,0:終了] "); int t = int.Parse(Console.ReadLine()); if (t == 0) break; Console.Write("探す文字列は?"); string s = Console.ReadLine(); for (i = 0; i < pb.Length; i++) { if (pb[i].Search(t, s)) pb[i].Writes(); } } } } このプログラムで public void Writes() { base.Write(); Console.WriteLine("住所:{0}",address); } のaddressが出力されません・・どうすれば 出力されますか?

  • [C#]順序通りに実行されない

    次のC#のプログラムについて質問です。 //ここから using System; class Myclass { double[] point; string[] name; int nMax; public double this[string str] { get { for (int i = 0; i < nMax; i++) { if (str == name[i]) return point[i]; } return -1.0; } set { for (int i = 0; i < nMax; i++) { if (str == name[i]) { point[i] = value; break; } } } } public Myclass(int n) { point = new double[n]; name = new string[n]; nMax = n; setname(); } void setname() { for(int i=0;i<nMax;i++) { Console.Write("生徒名[{0}] = ",i); name[i] = Console.ReadLine(); } } } class ch08ex02 { public static void Main() { Console.WriteLine( "まずはじめに生徒数と、全員の名前入力が必要です"); Console.Write("生徒数--- "); string strn = Console.ReadLine(); Myclass mc = new Myclass(int.Parse(strn)); string ans, strp; Console.WriteLine("X入力で終了"); while (true) { Console.Write("点数を入力したい生徒名--- "); if ((ans = Console.ReadLine()) == "X") break; Console.Write("点数--- "); strp = Console.ReadLine(); mc[ans] = double.Parse(strp); } Console.WriteLine(); Console.WriteLine("X入力で終了"); while (true) { Console.Write("点数を知りたい生徒名--- "); ans = Console.ReadLine(); if (ans == "X") break; Console.WriteLine("{0}くんの点数は{1}点です", ans, mc[ans]); } } } //ここまで これはプロパティを使って生徒の点数を配列に格納したり参照したりするプログラムですが、実行するとMain()の    Console.Write("生徒数--- "); string strn = Console.ReadLine(); Myclass mc = new Myclass(int.Parse(strn)); string ans, strp; Console.WriteLine("X入力で終了");    while (true) { Console.Write("点数を入力したい生徒名--- "); if ((ans = Console.ReadLine()) == "X") break; Console.Write("点数--- "); strp = Console.ReadLine(); mc[ans] = double.Parse(strp); } の部分が思い通りに動いてくれません。 まずコンソールに「生徒数--- 」と表示されConsole.ReadLine()で数字を受け取り、その数からMyclassのインスタンスを作成し、「X入力で終了」と表示した後whileループで生徒名と点数の入力を受け付けるはずです。 しかしこれを実行すると「X入力で終了」と表示する前にwhileループに入り、ループを抜けた後「X入力で終了」と表示されます。 つまり順番が逆になっているわけです。 なぜこうなるかわかりません。 誰か教えてください、お願いします。

  • C#でコンパイルができない。

    C#のベータ版をセットアップして以下のサンプルプログラムを コンパイルしたところ、エラーがでました。何がいけないのでしょうか?OSはWin98です。 css001.cs(7,3): error CS0117: 'System.Console' does not contain a definition for 'Writeline' using System; プログラムリスト public class CSS001 { public static void Main(string[] args) { Console.Writeline("Hello World"); } }

  • C#での関数テーブルの作り方

    同じ質問で昔以下の回答がありましたが、今はライブラリが進歩しているようなので、より新しい構文を使った書き方がありましたら、是非ご教授いただければと思います。 delegate bool Execute( string oprand ); class Entry {  static bool aaa(string op)   { System.Console.WriteLine("aaa "+op); return true; }  static bool bbb(string op)   { System.Console.WriteLine("bbb "+op); return true; }  static bool ccc(string op)   { System.Console.WriteLine("ccc "+op); return true; }  static public void Main() {   System.Collections.Generic.Dictionary<string,Execute> map =    new System.Collections.Generic.Dictionary<string,Execute>();   map["AAA"] = aaa;   map["BBB"] = bbb;   map["CCC"] = ccc;   map["BBB"]("argument");  } } 宜しくお願い致します。

  • 小文字のみを数える方法

    小文字のみを表示させるプログラミングがいくらやってもできません。範囲指定をどこですれば良いのかわからず、全部の文字数をカウントしてしまいます。 ご指摘お願いします。 #include <stdio.h> #include <string.h> int main(void) { char str[256]; int a; printf("大文字と小文字をランダムに入力\n"); gets(str); printf("小文字の数は%dです\n",strlen(str),a); return(0); }

このQ&Aのポイント
  • MFC-J6973CDWで電源が入らないトラブルに悩んでいる方へ、解決方法をご紹介します。
  • Windows10をお使いの方に向け、MFC-J6973CDWの電源トラブルの解決方法をご説明します。
  • MFC-J6973CDWの電源がオフになり、再度起動できない場合の対処法をお伝えします。
回答を見る

専門家に質問してみよう