| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 600 人关注过本帖
标题:主字符串中统计子字符串,看似简单之问题,却让我三天两熬夜?为什么不完全 ...
只看楼主 加入收藏
lxsxd
Rank: 5Rank: 5
等 级:贵宾
威 望:14
帖 子:153
专家分:357
注 册:2014-4-15
结帖率:96.15%
收藏
已结贴  问题点数:15 回复次数:3 
主字符串中统计子字符串,看似简单之问题,却让我三天两熬夜?为什么不完全对?
一、题目
编一个程序,定义一个字符串变量,输入字符串,然后再输入一个字符(或一个字符串),在字符串中查找该字符(或这个字符串)出现的次数。
要求:1、在字符串中统计一个字符出现的次数(已经完成);
      2、在主字符串中统计子字符串出现的次数。——看似简单之问题,却让我三天两熬夜【焦急求助】
二、代码
static void Main()
        {
              Console.WriteLine ("请输入字符串");
              string str1 = Console.ReadLine();

              Console.WriteLine ("请输入子字符串");
              string str2 = Console.ReadLine ();

              int str2len = str2.Length;
              int str1len = str1.Length;

              int x = 0, y = 0;

             for (int k = 0; k < str1len-1; k++)
             {
                 for (int j = 0; j < str2len-1; j++)
                 {
                     if (str1[k + j] == str2[j])
                     {
                         x++;
                         if (x % str2len == 0)
                         {
                             y++;
                             x = 0;
                         }
                     }
                 }
             }
             Console.WriteLine("{0}出现{1}次", str2, y);
            Console.ReadLine ();
            
        }

三、困惑
1、输入主字符串 hotmahotmahot  输入子字符串 hot  ,正确的次数应该是3次,运行结果却是2次。错在哪里?
2、输入主字符串 I am a teacher I am a student  输入子字符串 am  ,正确的次数应该是2次,运行结果也是2次。又是为什么?

另:不用substring()编写。

【焦急求助大侠们!!!!】
搜索更多相关主题的帖子: 统计 字符串 
2014-05-30 18:26
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
收藏
得分:5 
从hotmahotmahot字符串就能看出楼主的算法是有问题的,第二个字符串输出正确只是恰好碰上而已
      static void Main(string[] args)
        {
            Console.WriteLine("请输入字符串");
            string str1 = Console.ReadLine();

            Console.WriteLine("请输入子字符串");
            string str2 = Console.ReadLine();

            int str2len = str2.Length;
            int str1len = str1.Length;
            int x = 0, y = 0;
            for (int k = 0; k < str1len - 1; k++)
            {
                for (int j = 0; j < str2len; j++)
                {
                    if (str1[k + j] == str2[j])
                    {
                        x++;
                        if (x % str2len == 0)
                        {
                            y++;
                            x = 0;
                            k += str2len;
                        }
                    }
                }
            }
            Console.WriteLine("{0}出现{1}次", str2, y);
            Console.ReadLine();
        }
2014-05-30 20:51
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
收藏
得分:5 
不用算法可以这样做
static void Main(string[] args)
        {
            Console.WriteLine("请输入字符串");
            string str1 = Console.ReadLine();

            Console.WriteLine("请输入子字符串");
            string str2 = Console.ReadLine();
            int x = 0, y = 0;
            int n = str1.LastIndexOf(str2);
            while (n >= 0 && x <= n)
            {
                x = str1.IndexOf(str2, x);
                x += str2.Length;
                y++;
            }
            Console.WriteLine("{0}出现{1}次", str2, y);
            Console.ReadLine();
        }
    }
2014-05-30 20:53
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:5 
for (int k = 0; k < str1len-1; k++)
             {
                 for (int j = 0; j < str2len-1; j++)
                 {
循环出错了,对于外层循环只需要遍历到母字符串减去子字符串的长度,子字符串你的也没有遍历完整str2len-1


[ 本帖最后由 邓士林 于 2014-5-30 22:54 编辑 ]

Maybe
2014-05-30 22:52
快速回复:主字符串中统计子字符串,看似简单之问题,却让我三天两熬夜?为什么不 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024678 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved