C语言有一个字符串,包含n个字符,将字符串从第i个字符到第j个字符间的字符逆置 用数组做
时间: 2024-09-25 20:11:34 浏览: 30
在C语言中,如果你想逆置一个字符串中的子串(从第i个字符到第j个字符),可以先创建一个新的临时数组来存储子串的内容,然后交换这个子串内的字符。以下是一个简单的步骤:
1. 确定子串范围:首先检查索引 i 和 j 的合法性,确保它们都在0到n-1范围内,并且 i <= j。
2. 计算新数组大小:`size = j - i + 1`,因为逆置后的子串需要包括i到j的所有字符。
3. 分配临时数组空间:动态分配一个大小为`size`的临时数组,如`temp[size]`。
4. 逆序填充临时数组:从原字符串的第i个字符开始,依次复制到临时数组,但是是从后往前复制,即`src[i], src[i+1], ..., src[j]`到`temp[0], temp[1], ..., temp[size-1]`。
5. 将临时数组内容复制回原字符串:从原字符串的第i个位置开始,逐个替换子串内的字符,直到第j+1个位置。
6. 清理:如果之前分配了临时数组,记得释放内存。
以下是一个示例函数,假设`str`是输入字符串,`strlen(str)`返回其长度,`substr`是子串:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void reverse_substring(char *str, int i, int j) {
if (i >= j || i < 0 || j >= strlen(str)) return; // 检查索引
int size = j - i + 1;
char *temp = (char*)malloc(size * sizeof(char)); // 动态分配内存
for (int k = 0; k < size; ++k) {
temp[k] = str[k + i]; // 从后往前复制
}
for (int k = 0, l = size - 1; k < l; ++k, --l) { // 逆序填充
str[k + i] = temp[l];
str[l + i] = temp[k];
}
free(temp); // 释放临时数组
}
// 使用示例
int main() {
char str[] = "Hello, world!";
int i = 7, j = 12;
reverse_substring(str, i, j);
printf("Reversed substring: %s\n", str);
return 0;
}
```
阅读全文