繁体   English   中英

访问字符串数组中的字符

[英]Accessing chars in string array

我有一个字符串数组,如下所示。 我正在迭代字符串数组并打印每个字符串元素的第四个字符,它始终为1。

我一直在尝试做的是实现一个if语句,这样如果每个元素的每个第四个字符为1然后打印一些东西,但我不确定如何访问我正在迭代的每个元素。

我添加了一个带有一些伪代码的if语句来尝试突出我想要做的事情。 谢谢你的帮助。

       namespace ConsoleApplication6
       {
          class Program
              {
           static void Main()
              {
        string[] bitstrings = new string[16];
        bitstrings[0] = "00101";
        bitstrings[1] = "00001";
        bitstrings[2] = "00001";
        bitstrings[3] = "00101";
        bitstrings[4] = "00101";
        bitstrings[5] = "00101";
        bitstrings[6] = "00101";
        bitstrings[7] = "00101";
        bitstrings[8] = "00101";
        bitstrings[9] = "00101";
        bitstrings[10] = "00101";
        bitstrings[11] = "00101";
        bitstrings[12] = "00101";
        bitstrings[13] = "00101";
        bitstrings[14] = "00101";
        bitstrings[15] = "00101";

        for (int x = 0; x < bitstrings.Length; x++)
        {

            int s = bitstrings[x][4];
            Console.ReadLine();



        }

        if(/*all bitstrings[x][4] = 1*/)
        {
            //print something
        }

    }
}
 }

你的代码就在那里,你只需要记住字符串中的每个字符,无论其值如何,仍然是一个字符。 你的if语句也需要在for循环中。

for (int x = 0; x < bitstrings.Length; x++)
{
    //3 instead of 4 because arrays are 0 indexed
    if(bitstrings[x][3] == '1')
    {
       //valid char
    }
}
//Also don't need to read like every iteration.
Console.ReadLine(); 

编辑:如果所有第4个元素必须为1,则将其修改为包含布尔值,如果找到无效的char,则将其分解

bool allOne = true;
for (int x = 0; x < bitstrings.Length; x++)
{
    //3 instead of 4 because arrays are 0 indexed
    if(bitstrings[x][3] != '1')
    {
       allOne = false;
       break;
    }
}
if(allOne)
{ 
   //Do something
}

Console.ReadLine(); 
if (bitstrings.All(s => s[3] == '1'))
{
   //printSomething
}

这利用了LINQ“All”函数,当且仅当集合的所有元素都满足提供的谓词时才返回true。 在这种情况下,如果传递的字符串的第四个元素是字符“1”,则谓词返回true。

第四个元素用“3”索引,因为C#(像大多数语言一样)使用基于0的索引作为它们的数组。 您还可能需要using System.Linq添加到您的代码文件中以使用此解决方案。

像这样的东西?

static bool AllBitsEqual( IEnumerable<string> source , int offset , char value )
{
  return source.All( x => offset < x.Length && x[offset] == value ) ;
}

要么

static bool AllBitsEqual( IEnumerable<string> source , int offset , char value )
{
  return source.Aggregate( true , (acc,s) => acc &= (s.Length > offset && s[offset] == value ) ) ;
}

甚至...

static bool AllBitsEqual( IEnumerable<string> source , int offset , char value )
{
  bool flag = true ;
  foreach ( string s in source )
  {
    flag &= (s.Length > offset && s[offset] == value ) ;
  }
  return flag;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM