C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: 出現回数の最も多かった文字をカウント


(過去ログ 96 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■57116 / inTopicNo.1)  出現回数の最も多かった文字をカウント
  
□投稿者/ 1週間 (1回)-(2011/02/15(Tue) 11:32:47)

分類:[Java] 

countメソッドで調査対象文字列を引数にとり、戻り値として出現回数の最も多かった文字の出現回数を返したいのですが、難航しております。
教えていただけないでしょうか?

引用返信 編集キー/
■57117 / inTopicNo.2)  Re[1]: 出現回数の最も多かった文字をカウント
□投稿者/ じゃんぬねっと (38回)-(2011/02/15(Tue) 12:11:06)
じゃんぬねっと さんの Web サイト
No57116 (1週間 さん) に返信
> countメソッドで調査対象文字列を引数にとり、戻り値として出現回数の最も多かった文字の出現回数を返したいのですが、難航しております。
> 教えていただけないでしょうか?

普通にリストに格納して蓄積して大きいものを返せばいいと思いますが。
さて、同数だった場合はどうするのでしょうか?
引用返信 編集キー/
■57118 / inTopicNo.3)  Re[2]:
□投稿者/ 1週間 (2回)-(2011/02/15(Tue) 12:33:12)
2011/02/15(Tue) 14:56:12 編集(投稿者)
2011/02/15(Tue) 14:56:01 編集(投稿者)
2011/02/15(Tue) 14:55:55 編集(投稿者)

No57117 (じゃんぬねっと さん) に返信
早速の返信、ありがとうございます。

解決済み
引用返信 編集キー/
■57120 / inTopicNo.4)  Re[3]: 出現回数の最も多かった文字をカウント
□投稿者/ 1週間 (3回)-(2011/02/15(Tue) 13:49:38)
自己解決しました。
もう少し力をつけてから来させていただきます。
反省。
引用返信 編集キー/
■57125 / inTopicNo.5)  Re[4]: 出現回数の最も多かった文字をカウント
□投稿者/ マサヤ (256回)-(2011/02/15(Tue) 15:38:13)
C#で作ってみました
注)gcはガベージコレクションと無関係です orz

private GetCount CountValue(string target)
{
     IList<String> list = new List<String>();
     GetCount gc = null;
     // 文字を配列に格納
     for (int i = 0; i < target.Length; i++)
     {
            string tempValue = target.Substring(i, 1);
            list.Add(tempValue);
     }
     int baseCount = 0;
     // カウント
     foreach (string temp in list)
     {
            int searchCount = 0;
            if (baseCount == 0)
            {
                 foreach (string temp2 in list)
                 {
                    if (temp.Equals(temp2))
                    {
                       searchCount++;
                    }
                 }
                 if (baseCount < searchCount)
                 {
                   gc = new GetCount(searchCount, temp);
                     baseCount = searchCount;
                  }
            }
            else if (!temp.Equals(gc.KeyValue))
            {
                 foreach (string temp2 in list)
                 {
                     if (temp.Equals(temp2))
                     {
                         searchCount++;
                     }
                 }
                 if (baseCount < searchCount)
                 {
                       
                     gc = new GetCount(searchCount, temp);
                     baseCount = searchCount;
                 }
            }
       }
       return gc;
}

    public class GetCount
    {
        private int count = 0;
        private string keyValue = "";
        public GetCount(int _count, string _keyValue)
        {
            count = _count;
            keyValue = _keyValue;
        }
        public int Count
        {
            get { return count; }
            set { count = value; }
        }
        public string KeyValue
        {
            get { return keyValue; }
            set { keyValue = value; }
        }
    }

引用返信 編集キー/
■57135 / inTopicNo.6)  Re[5]: 出現回数の最も多かった文字をカウント
□投稿者/ なちゃ (483回)-(2011/02/15(Tue) 16:39:18)
No57125 (マサヤ さん) に返信
> C#で作ってみました

Dictionaryでcharをキーにしてカウントアップって感じにすると簡単になるかもしれません。

引用返信 編集キー/
■57136 / inTopicNo.7)  Re[5]: 出現回数の最も多かった文字をカウント
□投稿者/ todo (118回)-(2011/02/15(Tue) 16:47:40)
2011/02/15(Tue) 16:48:24 編集(投稿者)
Dictionaryジェネリッククラスを使って作ってみました(C#)

private int CountValue(string target)
{
	Dictionary<char, int> dic = new Dictionary<char, int>();

	foreach (char c in target.ToCharArray()) {
		if (dic.ContainsKey(c))
			dic[c]++;
		else
			dic[c] = 1;
	}
	int max = 0;
	foreach (int n in dic.Values) {
		if (n > max)
			max = n;
	}
	return max;
}

#かぶった

引用返信 編集キー/
■57137 / inTopicNo.8)  Re[5]: 出現回数の最も多かった文字をカウント
□投稿者/ 渋木宏明 (58回)-(2011/02/15(Tue) 16:52:23)
渋木宏明 さんの Web サイト
C# の別解。

using System;
using System.Linq;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = "asajd;alsfjsdlnrfguhdrlkhdltntnhldk;zdkfoajgriouheoutyeuoartahogruaerg";

            char c;
            int count = Program.Count(text, out c);

            Console.Out.WriteLine("{0} : {1}", c, count);
        }

        static int Count(string source, out char c)
        {
            int count = -1;
            c = '\0';

            var result = source.GroupBy(_ => _).Select(_ => new { Char = _.Key, Count = _.Count() }).OrderByDescending(_ => _.Count).FirstOrDefault();

            if (result != null)
            {
                c = result.Char;
                count = result.Count;
            }

            return count;
        }
    }
}


引用返信 編集キー/
■57144 / inTopicNo.9)  Re[6]: 出現回数の最も多かった文字をカウント
□投稿者/ επιστημη (2600回)-(2011/02/15(Tue) 19:58:05)
επιστημη さんの Web サイト
ま、まけるもんかあっ(C++)

#include <string>
#include <map>
#include <algorithm>

using namespace std;

int count(const string& in) {
  int result = 0;
  map<char,int> m;
  for_each(in.begin(),in.end(),[&](char c) { result = max(result, ++m[c]); });
  return result;
}

// おためし
#include <iostream>

int main() {
  cout << count("abca") << endl
       << count("aaaa") << endl
       << count("abbb") << endl
       << count("") << endl;
}

引用返信 編集キー/
■57148 / inTopicNo.10)  Re[7]: 出現回数の最も多かった文字をカウント
□投稿者/ shu (435回)-(2011/02/15(Tue) 21:43:36)
2011/02/15(Tue) 21:56:53 編集(投稿者)
ついでにVB.NET LINQ 
※渋木宏明さんのとほぼ同じ

        Dim strSrc = "abcdfhhhujuaagbdcgekjfaufheufuanebvyewiendnedufdjhbcue"

        Dim itm = (From c In strSrc Group By c Into Cnt = Count() Order By Cnt Descending).FirstOrDefault

        If itm IsNot Nothing Then
            Console.WriteLine("{0}:{1}", itm.c, itm.Cnt)
        End If

引用返信 編集キー/
■57153 / inTopicNo.11)  Re[8]: 出現回数の最も多かった文字をカウント
□投稿者/ επιστημη (2601回)-(2011/02/15(Tue) 23:22:18)
επιστημη さんの Web サイト
Javaでもやってみた。

import java.util.*;

public class foo {

  public static int count(String input) {
    int result = 0;
    Dictionary<Character,Integer> dic = new Hashtable<Character,Integer>();
    for ( char ch : input.toCharArray() ) {
      Integer val = dic.get(ch);
      dic.put(ch, (val == null) ? 1 : val.intValue()+1);
      result = ( result < newValue ) ? newValue : result;
    }
    return result;
  }

  public static void main(String args[]) {
    System.out.println( count("abca") );
    System.out.println( count("aaaa") );
    System.out.println( count("abbb") );
    System.out.println( count("abcd") );
  }
}

引用返信 編集キー/
■57240 / inTopicNo.12)  Re[9]: 出現回数の最も多かった文字をカウント
□投稿者/ 1週間 (4回)-(2011/02/18(Fri) 14:09:53)
皆さん、本当にありがとうございます。
とても参考になりましたし、こんな質問に丁寧に対応して頂いて、とても嬉しいです。
精進しますので、よければまたお願いします。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -