C语言编程:编写一字符串移动函数char *shift(char*pstr, int n, char mode),该函数的功能是: (1)当mode='R时,将字符串pstr循环右移n位: (2)当mode=L时,将字符串pstr循环左移n位: 返回值为移位后的字符串的首地址。 例如:字符串“12345678, 循环右移3位将得到"67812345: 循环左移3位将得到“45678123*.
时间: 2024-02-13 08:01:55 浏览: 35
好的,这是一道经典的字符串移位的问题,下面是我的 C 代码实现:
```c
#include <stdio.h>
#include <string.h>
char* shift(char* pstr, int n, char mode);
int main() {
char str[] = "12345678";
int n = 3;
char mode = 'L';
printf("Original string: %s\n", str);
char* result = shift(str, n, mode);
printf("%c-shifted string by %d: %s\n", mode, n, result);
return 0;
}
char* shift(char* pstr, int n, char mode) {
int len = strlen(pstr);
if (n > len) {
n %= len;
}
char* temp = (char*)malloc((len + 1) * sizeof(char));
strcpy(temp, pstr);
if (mode == 'R') {
memmove(temp + n, pstr, len - n);
memmove(temp, pstr + len - n, n);
} else if (mode == 'L') {
memmove(temp, pstr + n, len - n);
memmove(temp + len - n, pstr, n);
}
return temp;
}
```
这段代码中,我们首先定义了一个 `shift` 函数,接收一个字符串指针 `pstr`,一个整数 `n` 和一个字符 `mode`,表示移位的方向。然后,我们使用 `strlen` 函数计算出字符串的长度,并根据 `n` 是否大于字符串长度做一个取模操作,防止出现 `n` 大于字符串长度的情况。
接下来,我们动态分配了一个大小为 `(len + 1) * sizeof(char)` 的内存空间,用于存储移位后的字符串。我们使用 `strcpy` 函数将原始字符串复制到 `temp` 指向的内存中。
最后,我们根据 `mode` 的值来分别进行左移或右移操作。我们使用 `memmove` 函数将内存中的字符串向左或向右移动 `n` 个位置,然后将移位后的字符串指针返回即可。
在 `main` 函数中,我们定义了一个字符串 `str`,然后调用了 `shift` 函数进行移位操作,并将结果打印出来。
阅读全文