编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
时间: 2024-03-01 19:51:25 浏览: 50
下面是一个实现将输入字符串反转的函数,使用双指针法,时间复杂度为 O(n),空间复杂度为 O(1):
```c++
void reverseString(char* s, int sSize){
if(s == nullptr || sSize <= 1) return;
int left = 0, right = sSize-1;
while(left < right){
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
```
函数接受两个参数,第一个参数是字符数组的指针,第二个参数是字符数组的长度。函数使用两个指针分别指向字符数组的首尾位置,然后将它们所指向的字符交换,直到两个指针相遇为止。
相关问题
使用数组指针,编写一个函数,其作用是将输入的字符串反转
好的,以下是使用数组指针实现字符串反转的函数的代码:
```c
void reverse_string(char *str) {
char *start = str;
char *end = str + strlen(str) - 1;
while (start < end) {
// 交换 start 和 end 指向的字符
char temp = *start;
*start++ = *end;
*end-- = temp;
}
}
```
这个函数的参数是一个指向字符数组的指针,也就是一个字符串。它的作用是将字符串反转,即将字符串的第一个字符和最后一个字符交换,第二个字符和倒数第二个字符交换,以此类推,直到整个字符串被反转。函数中使用了两个指针 start 和 end,它们分别指向字符串的第一个字符和最后一个字符,并且不断向中间移动,直到它们相遇为止。在移动指针的同时,函数还使用了一个临时变量 temp 来帮助交换指针指向的字符。
你可以将这段代码复制到你的编译器中进行编译运行,也可以将其集成到你的程序中。希望它能够满足你的需求!
C语言 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字数组S的形式给出 不要给另外的数组分配额外的空间解决这一问题
要实现这个功能,可以编写一个函数,使用双指针技巧,一个指针从字符串的开始位置向后移动,另一个指针从字符串的末尾开始向前移动,交换这两个指针所指向的字符,然后移动指针直到两个指针相遇或交错。这样就可以在不使用额外数组空间的情况下反转字符串。下面是具体的C语言代码实现:
```c
#include <stdio.h>
void reverseString(char *s) {
int length = 0;
char *end = s;
// 计算字符串长度
while (*end) {
length++;
end++;
}
// 使用双指针技巧进行字符交换
for (int i = 0; i < length / 2; i++) {
char temp = s[i];
s[i] = s[length - i - 1];
s[length - i - 1] = temp;
}
}
int main() {
char str[] = "Hello, World!";
printf("Original string: %s\n", str);
reverseString(str);
printf("Reversed string: %s\n", str);
return 0;
}
```
这段代码首先通过循环计算出字符串的长度,然后使用一个循环通过交换字符来反转字符串。需要注意的是,