将一个string左移N位置

 使用了《编程珠玑》上的解法。

#include <iostream>
#include <string>
using namespace std;

//注意这里使用了XOR进行交换的方法,这种方法不能让一个数和自身交换
void Reverse(string &str, int left, int right){
    for(; left < right; left++, right--){
        str[left] = str[left] ^ str[right];
        str[right] = str[left] ^ str[right];
        str[left] = str[left] ^ str[right];
    }
}

void ShiftStr(string &str, int offset){
    int len = str.length();
    offset = offset>=0 ? offset%len : offset%len + len;

    Reverse(str, 0, offset-1);
    Reverse(str, offset, len-1);
    Reverse(str, 0, len-1);
}

int main()
{
    string str;
    for (int i = -5; i <= 5; i++){
        str = "abcdefghijklmn";
        ShiftStr(str, i);
        cout<<"Move left "<<i<<" steps : "<<str<<endl;
    }
    return 0;
}

 

 

 

 

 

EOF

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以为您提供一个示例:Sub LeftShiftArray(ByRef arr() As Long, ByVal n As Long) Dim i As Long For i = 0 To UBound(arr) arr(i) = arr((i + n) Mod (UBound(arr) + 1)) Next i End Sub ### 回答2: 可以使用VB语言来编写一个循环左移函数。循环左移是将一个字符串或数组的元素按照指定的位数向左移动,并将超过边界的元素放到数组的末尾。 以下是一个示例的VB代码来实现循环左移函数: ``` Public Function LeftRotate(ByVal input As String, ByVal shift As Integer) As String Dim length As Integer = input.Length shift = shift Mod length '确保位移值在有效范围内 Dim rotatedArray(length - 1) As Char '将位移后的元素放入新数组 For i As Integer = 0 To length - 1 '计算新位置 Dim newIndex As Integer = (i + shift) Mod length rotatedArray(i) = input(newIndex) Next Return New String(rotatedArray) End Function ``` 此循环左移函数接受一个字符串input和一个位移值shift作为参数,并返回位移后的字符串。函数先计算出实际的位移值(对字符串长度取模),然后创建一个新的字符数组rotatedArray用于存储位移后的元素。然后通过循环,将原字符串中的每个元素根据新的位置放入新数组中。最后,将新数组转化为字符串返回。 使用该函数,可以将一个字符串进行循环左移操作: ``` Dim rotatedString As String = LeftRotate("HelloWorld", 2) Console.WriteLine(rotatedString) '输出:lloWorldHe ``` 以上就是一个使用VB语言编写的循环左移函数的示例。 ### 回答3: 要用VB写一个循环左移函数,可以使用以下代码实现: ```vb Function LeftShift(inputString As String, shiftCount As Integer) As String Dim resultString As String = "" ' 如果 shiftCount 大于输入字符串的长度,则取 shiftCount 对字符串长度的余数 shiftCount = shiftCount Mod inputString.Length ' 将左移后的结果拼接到结果字符串中 resultString = inputString.Substring(shiftCount) & inputString.Substring(0, shiftCount) ' 返回结果字符串 Return resultString End Function ``` 这个函数接收两个参数:输入字符串 `inputString` 和左移的位数 `shiftCount`。首先,我们将 `shiftCount` 对输入字符串的长度取余,以避免 shiftCount 大于字符串长度的情况。然后,我们将左移后的结果拼接到结果字符串 `resultString` 中,这是通过使用 `Substring` 函数来截取字符串的一部分,并将其重新排列。最后,我们将结果字符串返回给调用者。 例如,如果调用 `LeftShift("abcdef", 2)`,那么函数会将输入字符串 "abcdef" 左移两位,得到 "cdefab",并将其作为结果返回。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值