Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 替换字符串中的单个字符_C#_String_Unity3d_Tic Tac Toe - Fatal编程技术网

C# 替换字符串中的单个字符

C# 替换字符串中的单个字符,c#,string,unity3d,tic-tac-toe,C#,String,Unity3d,Tic Tac Toe,所以,我使用unity,我有一个字符串,它包含了tic-tac趾板的当前状态。看起来是这样的: XOX ONX OXX “N”是一个中性空间 问题是我想用“X”或“O”替换其中一个“N”。 我尝试使用: board[n] = "X"; 但我明白了 无法分配属性或索引器,它是只读的 所以我在想办法改变其中一个“N”。这是我的密码 if (manager.turn == 1 && !isUsed) { xSprite.enabled = true; manager

所以,我使用unity,我有一个字符串,它包含了tic-tac趾板的当前状态。看起来是这样的:

XOX
ONX
OXX
“N”是一个中性空间

问题是我想用“X”或“O”替换其中一个“N”。 我尝试使用:

board[n] = "X";
但我明白了

无法分配属性或索引器,它是只读的

所以我在想办法改变其中一个“N”。这是我的密码

if (manager.turn == 1 && !isUsed)
{
    xSprite.enabled = true;
    manager.board[int.Parse(gameObject.name)-1] = 'X';
    manager.GameEndingDraw();
    isUsed = true;
    manager.turn = 2;
}
else if (manager.turn == 2 && !isUsed)
{
    oSprite.enabled = true;
    manager.board[int.Parse(gameObject.name)-1] = 'O';
    manager.GameEndingDraw();
    isUsed = true;
    manager.turn = 1;
}

以下是您可以使用的4种方法:

ToCharArray

var array = board.ToCharArray();
array[indexOfNew] = newChar;
board = new string(array);
StringBuilder

var sb = new StringBuilder(board);
sb[indexOfNew] = newChar;
board = sb.ToString();
String.Remove和String.Insert

board = board.Remove(indexOfNew, 1)
    .Insert(indexOfNew, newChar.ToString());
子字符串和字符串插值

board = $"{board.Substring(0, indexOfNew)}{newChar}{board.Substring(indexOfNew+1, board.Length-indexOfNew-1)}";
假设
board
包含原始字符串,
newChar
包含新放置的“片段”,并且
indexOfNew
包含需要替换的字符串中的索引

当然,您可以将选择的选项包装到扩展方法中:

public static string ReplaceAt(this string inputString, int newCharIndex, char newChar)
{
    var newString = // Insert your choice of replacement from above here
    return newString;
}

以下是您可以使用的4种方法:

ToCharArray

var array = board.ToCharArray();
array[indexOfNew] = newChar;
board = new string(array);
StringBuilder

var sb = new StringBuilder(board);
sb[indexOfNew] = newChar;
board = sb.ToString();
String.Remove和String.Insert

board = board.Remove(indexOfNew, 1)
    .Insert(indexOfNew, newChar.ToString());
子字符串和字符串插值

board = $"{board.Substring(0, indexOfNew)}{newChar}{board.Substring(indexOfNew+1, board.Length-indexOfNew-1)}";
假设
board
包含原始字符串,
newChar
包含新放置的“片段”,并且
indexOfNew
包含需要替换的字符串中的索引

当然,您可以将选择的选项包装到扩展方法中:

public static string ReplaceAt(this string inputString, int newCharIndex, char newChar)
{
    var newString = // Insert your choice of replacement from above here
    return newString;
}

Tic-Tac趾板不是字符串,它是一个3×3的标记网格,例如chars。您应该将其表示为数组,而不是字符串:

var board = new char[3, 3];
for (int i = 0; i < board.GetLength(0); i++)
    for (int j = 0; j < board.GetLength(1); j++)
        board[i, j] = 'N';

Tic-Tac趾板不是字符串,它是一个3×3的标记网格,例如chars。您应该将其表示为数组,而不是字符串:

var board = new char[3, 3];
for (int i = 0; i < board.GetLength(0); i++)
    for (int j = 0; j < board.GetLength(1); j++)
        board[i, j] = 'N';

字符串
是不可变的。你必须做
board=board.Remove(n,1),Insert(n,X),但是你确实应该考虑一个不同的数据结构,比如2D char数组。<代码> String 是不可更改的。你必须做
board=board.Remove(n,1),Insert(n,X),但您确实应该考虑不同的数据结构,比如2D char数组。