C#查找char的特定迭代的索引

时间:2018-03-25 10:01:06

标签: c#

我正在尝试创建一个程序,它将循环遍历字符串中的每个字符,并声明字符特定的索引

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("enter");
            string expression = Console.ReadLine();

            foreach(char c in expression)
            {
                if (c == '+')
                {
                    Console.WriteLine("plus detected! :{0}",expression.IndexOf(c));
                }
            }

            Console.ReadLine();
        }
    }
}

我的代码的问题在于它没有说明循环中特定“+”的索引,而是说明了'+'的第一个实例

如何解决这个问题而不是说具体的指数

(例如1 + 2 + 3 + 4 + 5应该产生“1,3,5,7”,每个'+'的指数(?)

4 个答案:

答案 0 :(得分:4)

我建议使用for循环:

for(int i = 0; i < expression.Length; i++){
  if(expression[i]== '+'){
     Console.WriteLine("plus detected! :{0}",i);
  }
}

答案 1 :(得分:4)

最简单的解决方案是使用@Ali Ezzat Odeh建议的for循环。另一种解决方案是使用Enumerable.Range

var indices = Enumerable.Range(0, expression.Length)
                        .Where(index => expression[index] == '+');

foreach(var index in indices)
     Console.WriteLine(index);

答案 2 :(得分:0)

您可以使用for循环来迭代表达式:

for(int i = 0; i < expression.length; i++) 
{
    if (expression[i] == '+')
    {
        Console.WriteLine("plus detected! :{0}", i);
    }
}

或者您介绍一个自定义计数器

int i = 0;

foreach(char c in expression)
{
    if (c == '+')
    {
         Console.WriteLine("plus detected! :{0}", i);
    }
    i++;
}

答案 3 :(得分:0)

这种轻微的修改将解决您的问题,保留原始代码:

//you could even use byte for this to save memory :)
int index = -1;
Console.WriteLine("enter");
string expression = Console.ReadLine();

foreach (char c in expression)
    if (c == '+')
        Console.WriteLine("plus detected! :{0}", (index = expression.IndexOf(c,index + 1)));

Console.ReadLine();