黑马程序员技术交流社区

标题: 循环输出一句话中某个字的位置 [打印本页]

作者: 张俊双    时间: 2012-10-16 09:13
标题: 循环输出一句话中某个字的位置
比如“众所周知,钓鱼岛自古就是中国的,小日本的购钓鱼岛闹剧只能让世人耻笑,钓鱼岛过去、现在、将来都是中国的,谁也无法改变”。请问如何循环输出“钓鱼岛”的位置,求解?谢谢啦
作者: 中山郎    时间: 2012-10-16 09:48
namespace Test6
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "“众所周知,钓鱼岛自古就是中国的,小日本的购钓鱼岛闹剧只能让世人耻笑,钓鱼岛过去、现在、将来都是中国的,谁也无法改变";
         
            for (int i = 0; i < str.Length; i++)
            {
                if (str[i] == '钓')
                {
                   Console.WriteLine("钓鱼岛的位置是:{0}", i);
                }
            }

        }
    }
}
经实验可以输出钓鱼岛的位置,也可以用Indexof方法获取字符所在的位置,如果理解错啦,我再帮你弄一下。
作者: 许波    时间: 2012-10-16 09:56
Console.WriteLine("钓鱼岛的位置是:{0}", i);
钓字位置应该是i+1吧,如果是钓鱼岛就是i+1,i+2,i+3...楼主是不是这个意思?
作者: 张俊双    时间: 2012-10-16 11:39
谢谢,我想用indexof方法实现,还请不吝赐教!
作者: 中山郎    时间: 2012-10-16 11:54
张俊双 发表于 2012-10-16 11:39
谢谢,我想用indexof方法实现,还请不吝赐教!

Indexof只能判断字符首次出现的位置,不能循环输出位置,我自己弄了好久,问了一下别人还是没有搞定,水平有限,多多抱憾!
作者: 刘鹏辉    时间: 2012-10-16 12:00
Console.WriteLine("钓鱼岛的位置是:{0}", i);
这句是什么意思?可以解释下吗?我是高中生自学的
作者: 张俊双    时间: 2012-10-16 12:07
中山郎 发表于 2012-10-16 11:54
Indexof只能判断字符首次出现的位置,不能循环输出位置,我自己弄了好久,问了一下别人还是没有搞定,水 ...

仍然感谢,我再试试
作者: 张俊双    时间: 2012-10-16 12:16
刘鹏辉 发表于 2012-10-16 12:00
Console.WriteLine("钓鱼岛的位置是:{0}", i);
这句是什么意思?可以解释下吗?我是高中生自学的 ...

其意思就是输出要显示的内容;“{0}”是i占位符,i是什么,“{0}”就显示什么,这里i显示的是数字,比如是6,完整的显示是:钓鱼岛的位置是6。
作者: 和志强    时间: 2012-10-16 20:22
  1. string str = "众所周知,钓鱼岛自古就是中国的,小日本的购钓鱼岛闹剧只能让世人耻笑,钓鱼岛过去、现在、将来都是中国的,谁也无法改变";
  2.             for (int i = 0; i < str.Length; )
  3.             {
  4.                 if (str.IndexOf("钓鱼岛", i) != -1)//如果找到了"钓鱼岛"
  5.                 {
  6.                     Console.WriteLine(str.IndexOf("钓鱼岛", i));//输出"钓鱼岛"的位置
  7.                     i = str.IndexOf("钓鱼岛", i) + 3;//对i重新赋值,让其从岛后面的位置找起                    
  8.                 }              
  9.             }
  10.             Console.ReadKey();
复制代码
输出结果:
5
21
34

不知道楼主要的是不是这样的,用了这个重载IndexOf(String, Int32) :报告指定字符串在此实例中的第一个匹配项的索引。该搜索从指定字符位置开始。
作者: 和志强    时间: 2012-10-16 20:33
  1.       else
  2.                 {
  3.                     break;
  4.                 }
复制代码
把这个加到for循环里,可以在查不到的时候停止,刚忘了加了
作者: 中山郎    时间: 2012-10-16 20:45
和志强 发表于 2012-10-16 20:22
输出结果:
5
21

受教啦,发现如果里面如果不使用i判断位置的话,即使逻辑正确也会死循环。
作者: 中山郎    时间: 2012-10-16 20:48
中山郎 发表于 2012-10-16 20:45
受教啦,发现如果里面如果不使用i判断位置的话,即使逻辑正确也会死循环。 ...

namespace Test6
{
   
    class Program
    {
        static void Main(string[] args)
        {
            string str = "众所周知,钓鱼岛自古就是中国的,小日本的购钓鱼岛闹剧只能让世人耻笑,钓鱼岛过去、现在、将来都是中国的,谁也无法改变";

            for (int i = 0; i < str.Length; i++)
            {
                if (str.IndexOf("钓鱼岛",i) != -1)
                {
                    int a = str.IndexOf("钓鱼岛",i);
                    Console.WriteLine("钓鱼岛出现的位置:{0}",a);
                    i = a+3;
                }
              
            }

           
        }
    }
}
没问题啊,我运行的没有错误。
作者: 张俊双    时间: 2012-10-16 21:01
中山郎 发表于 2012-10-16 20:48
namespace Test6
{
   

谢谢,你辛苦了,受益匪浅啊!
作者: 张俊双    时间: 2012-10-16 21:02
和志强 发表于 2012-10-16 20:22
输出结果:
5
21

谢谢,都太有才了!
作者: 颜晋南    时间: 2012-10-18 21:27
中山郎 发表于 2012-10-16 09:48
namespace Test6
{
    class Program

你这个方法要是文字中出现一个 钓鱼。也会当做钓鱼岛。这样就错了。所以应该要判断“钓鱼岛”
作者: 刘鹏辉    时间: 2012-10-30 11:26
张俊双 发表于 2012-10-16 12:16
其意思就是输出要显示的内容;“{0}”是i占位符,i是什么,“{0}”就显示什么,这里i显示的是数字,比如 ...

这个和Console.WriteLine("钓鱼岛的位置是:" +  i); 区别在哪?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2