注册 登录
编程论坛 C# 论坛

这道题目是不是出错了? IndexOf()是查找首次出现的位置,怎么能统计出现的次数呢?

lxsxd 发布于 2014-10-16 14:35, 735 次点击
7-3:设一个有大小写字母的字符串和一个查询字符,使用String类的IndeoxOf来判断在该字符串中要查找的字符出现的次数。
答:这道题目是不是出的有问题。因为IndexOf()是判断第一次出现位置的方法,不是统计出现的次数。
这个题目按照自己的思路实现的代码是:
namespace 书本练习题
{
    class Program
    {
        static void Main(string[] args)
        {
            int countOne = 0;
            Console.WriteLine("请输入一个字符串:");
            string strWord = Console.ReadLine();
            Console.WriteLine("请输入一个子字符:");
            char chr = Convert.ToChar (Console.ReadLine());
            for (int i = 0; i < strWord.Length; i++)   //不是用IndexOf()判断统计出现的次数;那么用IndexOf()怎么做呢?
            {
                if (strWord[i] == chr)
                {
                    countOne++;
                }
            }
            Console.WriteLine("字符{0}在字符串中出现的了{1}次!", chr, countOne);

            Console.ReadKey();
        }
    }
}

那么:用IndexOf()如何判断出现的次数呢?
4 回复
#2
lxsxd2014-10-16 14:36
请各位大侠高手帮忙,小虾在此先谢谢!
#3
邓士林2014-10-16 16:21
利用IndexOf的重载函数
#4
lxsxd2014-10-16 19:56
感谢信
--------
谢谢 邓士林 ,本题已经解决。
#5
lxsxd2014-10-16 21:44
这两种方法都能实现:
(1)使用IndexOf()重载
namespace 书本练习题
{
    class Program
    {
        static void Main(string[] args)
        {
            int countOne = 0;
            Console.WriteLine("请输入一个字符串:");
            string strWord = Console.ReadLine();
            Console.WriteLine("请输入一个子字符:");
            char chr = Convert.ToChar(Console.ReadLine());
 
            //使用indexOf的重载函数
            int index = 0;
            index = strWord.IndexOf(chr, index);//从下标为index处开始查找,有返回下标,无返回-1
            while (index != -1)
            {
                index = strWord.IndexOf(chr, index+1);
                countOne++;
            }
            Console.WriteLine("字符{0}在字符串中出现的了{1}次!", chr, countOne);
            Console.ReadKey();
        }
    }
}

(2)使用Substring()截取字符串
namespace 书本练习题
{
    class Program
    {
        static void Main(string[] args)
        {
            int countOne = 0;
            Console.WriteLine("请输入一个字符串:");
            string strWord = Console.ReadLine();
            Console.WriteLine("请输入一个子字符:");
            char chr = Convert.ToChar(Console.ReadLine());
 
            //使用substring()截取字符串
            int index = 0;
            do
            {
               
                index = strWord.IndexOf(chr);  //取字符Chr出现的下标
                int End = strWord.Length - 1;  //取字符串strWord最后字符的下标
                strWord = strWord.Substring(index+1, End - index);//截取从下标+1处开始到结尾的字符串
                if (index != -1)
                {
                    countOne++;//进入累加器累加一次,当最后没有出现chr时,不进入累加器
                }               
            } while (index != -1);
            Console.WriteLine("字符{0}在字符串中出现的了{1}次!", chr, countOne);
            Console.ReadKey();
        }
    }
}
1