函数实现,字符串循环移动n位,,n为正数时右移,负数时左移
时间: 2023-10-25 11:08:52 浏览: 67
以下是一个 Python 实现:
```python
def rotate_string(s: str, n: int) -> str:
"""
字符串循环移动n位,n为正数时右移,负数时左移
"""
if not s:
return ""
n = n % len(s) # 处理 n 大于字符串长度的情况
if n == 0: # n 为 0,直接返回原字符串
return s
if n > 0: # 右移
return s[-n:] + s[:-n]
else: # 左移
return s[-n:] + s[:-n]
```
其中 `s` 是要进行循环移动的字符串,`n` 是移动的位数。
函数首先处理 `n` 大于字符串长度的情况,将 `n` 取模使其在字符串长度范围内。然后判断 `n` 的正负号,分别进行右移或左移操作。最后返回移动后的字符串。
相关问题
定义函数,将字符串循环右移n个字符,例如abcde循环右移两位:deabc
```python
def right_shift(s: str, n: int):
return s[-n:] + s[:-n]
s = "abcde"
n = 2
print(right_shift(s, n)) # "deabc"
```
c语言实现把一个字符串循环右移n位。如“abcdehi',n=2,则输出为hiabcde
您好!针对您的问题,类似于左移n位的实现,可以使用以下C语言代码实现将一个字符串循环右移n位的功能:
```c
#include <stdio.h>
#include <string.h>
void rightShift(char *str, int n);
int main() {
char str[] = "abcdehi";
int n = 2;
rightShift(str, n);
printf("%s\n", str);
return 0;
}
void rightShift(char *str, int n) {
int len = strlen(str);
n %= len;
int i, j, k;
char temp;
for (i = len - n, j = len - 1; i < j; i++, j--) {
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
for (i = 0, j = len - n - 1; i < j; i++, j--) {
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
for (i = 0, j = len - 1; i < j; i++, j--) {
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
```
与左移n位的实现类似,首先定义一个函数 `rightShift`,接收一个字符串指针 `str` 和一个整数 `n`,表示将字符串循环右移n位。其中,函数体内部首先获取字符串的长度 `len`,并将n对len取余,以便处理n大于len的情况。然后将字符串分为两段,第一段为后n个字符,需要翻转顺序;第二段为前面的字符,同样需要翻转顺序;最后将整个字符串翻转即可得到循环右移n位后的结果。
在main函数中,我们定义了一个字符串和一个整数n,然后调用 `rightShift` 函数将字符串循环右移n位,最后输出结果。
希望能够帮助到您!