C语言用动态分配实现字符串循环左移,例如: 输入 hello world! 3 输出 lo world!hel
时间: 2024-10-12 17:16:09 浏览: 29
在C语言中,动态分配内存通常通过`malloc()`函数来实现字符串的循环左移操作。对于给定的字符串和位移量,可以按以下步骤操作:
1. 首先,计算新的字符串长度,原字符串加上位移后的字符数减去原始字符串的首字符(因为循环左移会跳过第一个字符)。
2. 使用`malloc()`为新字符串分配足够的空间,假设新长度为`new_len`。
3. 将原字符串中的每个字符复制到新位置,如果需要的话,跳过已移动过的部分。
4. 如果位移超过字符串长度,将剩余部分添加到新字符串的开始,保持循环效果。
以下是一个简单的示例代码片段,演示如何实现这一功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void left_rotate(char* str, int shift) {
int len = strlen(str);
shift %= len; // 转移到的有效范围
char* new_str = (char*)malloc((len + shift) * sizeof(char)); // 动态分配空间
if (!new_str) {
printf("Memory allocation failed.\n");
return;
}
// 将原字符串复制到新位置并插入循环部分
for (int i = 0; i < len; ++i) {
new_str[(i + shift) % len] = str[i];
}
// 将剩余部分连接到新字符串开头
if (shift > 0) {
strcat(new_str, str);
}
strcpy(str, new_str); // 更新原字符串指向新字符串
free(new_str); // 释放旧字符串内存
}
int main() {
char input[] = "hello world!";
int shift = 3;
left_rotate(input, shift);
printf("%s\n", input); // 输出结果
阅读全文