加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 作为数组访问字符串,检查索引的值并可能更改该索引中的字

发布时间:2020-12-16 00:22:49 所属栏目:百科 来源:网络整理
导读:我一直在尝试读取一个字符串,然后逐个为每个字符运行一个随机数,如果生成一个5,则将字符从1更改为0,反之亦然.我觉得我几乎在那里这是我的三分之一尝试,但我写了索引有一点点问题,因为它告诉我它是只读的.这是我的代码: string mutate = "1010";for (int i =
我一直在尝试读取一个字符串,然后逐个为每个字符运行一个随机数,如果生成一个5,则将字符从1更改为0,反之亦然.我觉得我几乎在那里这是我的三分之一尝试,但我写了索引有一点点问题,因为它告诉我它是只读的.这是我的代码:

string mutate = "1010";

for (int i = 0; i < 4; i++)
{
    int MutProbablity = random.Next(1,1000);
    if (MutProbablity == 5)
    {
        if (mutate[i] == '0')
        {
            mutate[i] = '1';
        }
        else if (mutate[i] == '1')
        {
            mutate[i] = '0';
        }
    }
}

这是我的错误:

Property or indexer ‘string.this[int]‘ cannot be assigned to — it is read only

有人能告诉我如何解决这个问题,或者建议我以不同的方式实现我的目标吗?

解决方法

.NET中的字符串是不可变的,因此您将无法修改任何字符,但您可以通过首先将其转换为可变的char []来实现目标.

像这样:

var chars = mutate.ToCharArray();     // convert to char[]
for (int i = 0; i < 4; i++)
{
    int MutProbablity = random.Next(1,1000);
    if (MutProbablity == 5)
    {
        if (chars[i] == '0')
        {
            chars[i] = '1';
        }
        else if (chars[i] == '1')
        {
            chars[i] = '0';
        }
    }
}

mutate = new String(chars);    // convert to back to string

另一种方法是使用Linq(以及一个非常丑陋的三元运算符串).

var new string(mutate.Select(c => 
    (random.Next(1,1000) == 5) ? ((c == '0') ? '1' : (c == '1') ? '0' : c) : c).ToArray());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读