如何在不使用IndexOf或Substring的情况下移位字符?

时间:2013-06-27 21:06:38

标签: c# .net

如何使用Shift运算符(>>)移动字符串的字符,而不使用Substring和IndexOf?

例如,我希望字符串中的每秒字符向右(或向左)移动1。

E.g。

每次迭代都应该将一个字符向右移动一次:

baeltazor
abeltazor
aebltazor
aelbtazor
aeltbazor
aeltabzor
aeltazbor
aeltazobr
aeltazorb

然后它会继续,直到每个角色都转移到字符串的末尾一次。

然后它会继续,直到每个角色都转移到字符串的末尾一次。

1 个答案:

答案 0 :(得分:3)

最简单的方法是使用string.ToCharArray()方法获取一个字符数组,然后在O(n)遍历中操作数组,然后通过ToString()方法将其返回到字符串。操作字符串的效率非常低,因为字符串是不可变的,每次更改都会创建一个新的字符串对象。

向左或向左移动的示例:

var myString = "hello";
// Create char array
var myStringArray = myString.ToCharArray();

// Iterate the array of chars
for (int i = 0; i < myStringArray.Length; i++)
{
    // Only every second index
    if (i % 2 == 1)
    {
        // Swap chars
        var tempChar = myStringArray[i];
        myStringArray[i] = myStringArray[i-1];
        myStringArray[i-1] = tempChar;
    }
}

// String result
var result = new string(myStringArray);