2012-03-24 77 views
2

我通过一个看起来像这样的* 000000或* 110101之类的com端口接收字符串。每个字符代表PCB上的继电器状态,星号后的第一个字符代表第一个继电器等。我需要分别检查每个字符是否为1或0,然后相应地将标签设置为ON或OFF。检查字符串中的字符是1还是0

我的代码将是这样的:

if(char 1 == "1") 
{ 

    label4.Text = "ON";  
} 
else 
{ 
    label4.Text = "OFF"; 
} 

等下来的所有6个字符的行。但我不知道如何分离每个角色。

谢谢!

+0

使用string.substring(startpos,length)来获取子字符串并相应地执行操作。 – 2012-03-24 09:04:22

+0

你是什么意思索引? 'string a =“10”; char one = a [0]; char two = a [1];'很难理解你的问题,它也包含第1行的语法错误。 – Gleno 2012-03-24 09:05:44

+0

char [] chArray = yourstring.ToCharArray();将只返回你的字符串作为字符arrray来使用.. – Flowerking 2012-03-24 09:07:11

回答

8

听起来像是你要使用的indexer on String来提取单个char

string text = "*110101"; // Wherever you get this from... 
label4.Text = text[1] == '1' ? "ON" : "OFF"; 
label5.Text = text[2] == '1' ? "ON" : "OFF"; 
label6.Text = text[3] == '1' ? "ON" : "OFF"; 
label7.Text = text[4] == '1' ? "ON" : "OFF"; 
label8.Text = text[5] == '1' ? "ON" : "OFF"; 
label9.Text = text[6] == '1' ? "ON" : "OFF"; 

这是假设你是幸福的标签文本设置为“OFF”比“1之外的任何值”。 (正如在评论中指出,使用双引号的字符串文字,但单引号字符文字

注意我是如何使用的条件运算符这里简化代码:如果你想基本上根据条件选择两个值(“ON”和“OFF”),条件运算符比if/else简单得多。当然,不要过头,但值得熟悉。

但是,我也建议你可能想把相关的标签放入一个集合中。那么你可以使用类似的东西:

for (int i = 0; i < 6; i++) 
{ 
    toggles[i].Text = text[i + 1] == '1' ? "ON" : "OFF"; 
} 
+3

OP,注意'1'周围的单引号指定一个char而不是一个字符串。 – tomfanning 2012-03-24 09:05:42

4

你已经有字符串了吗?

您可以使用字符串对象上的索引器来访问字符。

例子:

string s = "110110"; 
if (s[3] == '0') label4.Text = "ON"; 
+1

除了它会设置相反方向(1应该表示ON,而不是OFF),否则它将不会*设置为“OFF”。 – 2012-03-24 09:07:50

1

你可以得到特定的字符:

串relaysStatus = “100110”;
char c = relaysStatus.ElementAt(0);

或可以那么所有转换成布尔列表:

变种继电器= relaysStatus.Select(Q => q == '1')ToList();

+0

虽然第二种方法可能有用,但使用'ElementAt'代替字符串上的索引器没有任何好处。 – 2012-03-24 09:18:14

+0

是的,我也是,但那是他的问题,我应该先回答他,然后提出更好的解决方案 – 2012-03-24 09:22:26

+0

问题中的问题是否要求使用LINQ?它要求得到一个字符串中的单个字符 - 而索引器(例如'text [0]')只是一个更好的方法,IMO。它更高效,更具可读性。你认为使用ElementAt的好处是什么? – 2012-03-24 09:40:53

1

进一步移动,你可以为字符转换为开/关字符串创建扩展方法:

public static class CharExtensions 
{ 
    public static string ToOnOff(this char ch) 
    { 
     return (ch == '1') ? "On" : "Off"; 
    } 
} 

之后,你可以使用它(很干净的代码):

label1.Text = input[0].ToOnOff(); 
label2.Text = input[1].ToOnOff(); 

UPDATE :我认为要检查'0'和'1'值是否合适。但这取决于你的输入字符串。

public static class CharExtensions 
{ 
    public static string ToOffOn(this char ch) 
    { 
     switch (ch) 
     { 
      case '0' : return "Off"; 
      case '1': return "On"; 
      default: 
       return ch.ToString(); // Or rise exception 
     }    
    } 
} 
相关问题