大家好,本人初学C#,遇到一个问题,请大家指教一下! 
题目是:输入一串字符,统计各字符出现的次数。 
以下是我写的代码:
using System;namespace 字符串统计
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
static int Count(string s,string word)
{
int i = 0,j = 0, x = 0;
while(x >= 0)
{
x = s.IndexOf(word,j);
j = x + word.Length;
if(x >= 0)
{
i++;
}
}
return i;
}
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
Console.WriteLine("请输入字符串:");
string str = Console.ReadLine();
for(int i = 0;i < str.Length;i++)
{
int m = Count(str,str.Substring(i,1));
Console.WriteLine("{0}出现的次数是{1}次:)",str.Substring(i,1),m);
}
}
}
}
有点小bug  如果我输入abcda 
输出结果是: 
a出现的次数是2次:) 
b出现的次数是1次:) 
c出现的次数是1次:) 
d出现的次数是1次:) 
a出现的次数是2次:) 
两个a重复了,a出现的次数是2次:) 这句话出现了2次 
请问怎么解决这个问题,谢谢指教

解决方案 »

  1.   

    改成这样:
    using System;
    using System.Text;namespace 字符串统计
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    class Class1
    {
    static int Count(string s,string word)
    {
    int i = 0,j = 0, x = 0;
    while(x >= 0)
    {
    x = s.IndexOf(word,j);
    j = x + word.Length;
    if(x >= 0)
    {
    i++;
    }
    }
    return i;
    }
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
    //
    // TODO: 在此处添加代码以启动应用程序
    //
    Console.WriteLine("请输入字符串:");
    string str = Console.ReadLine();
    StringBuilder sb = new StringBuilder();
    for(int i = 0;i < str.Length;i++)
    {
    int m = Count(str,str.Substring(i,1));
    if(!sb.ToString().Contains(str.Substring(i,1)))
    {
    Console.WriteLine("{0}出现的次数是{1}次:)",str.Substring(i,1),m);
      }
    sb.Append(str.Substring(i,1));
    }
    }
    }
    }
      

  2.   

    用一个StringBuilder把输出过的字符先储起来, 然后在每次的Console输出中都检查一下当前字符是否有被输出过
      

  3.   

    最简洁的方法:  Console.WriteLine("请输入字符串:");
      string str = Console.ReadLine();
      for (int i = 0; i < str.Length; i++)
      {
        int m = Count(str, str.Substring(i, 1));
        if (i==0 || str.Substring(0,i).IndexOf( str.Substring(i, 1),0) < 0)
        {
          Console.WriteLine("{0}出现的次数是{1}次:)",str.Substring(i,1),m);
        }
      }
      

  4.   

    Leo大哥,你帮我改的代码有错误啊,string对象并不包括Contains啊
    怎么弄的呀?
      

  5.   

    汗汗...我发的代码都是Test通过的, 而且, string怎么会没有Contains()这个方法呢?