gpt4 book ai didi

c - 使用三个指针反转字符串中的单词?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:12:00 26 4
gpt4 key购买 nike

我正在尝试反转字符串中的单词并且我相信我已经编写了正确的逻辑,但是在调试时我开始知道我在 new_array char 指针变量中输入的值是迷路?我似乎不知道为什么?

你能告诉我我做错了什么以及可以做些什么来纠正它吗?

#include <stdio.h>

void reverse_words(char *arr, int size) {
char *ptr = arr;
char *new_array = (char*)malloc(sizeof(char*) * size);

while (*ptr != '\0') {
ptr++;
}
ptr--;

for (int i = size - 1; i >= 0; i--) {
if (*ptr != ' ') {
ptr--;
} else {
char *temp = ptr;
temp++;
//
// Problem is in this block new_array value is lost when i increment it
while (*temp != ' ' && *temp != '\0') {
*new_array = *temp;
new_array++;
temp++;
}
if (i != 0) {
*new_array = *ptr;
ptr--;
}
}
}
*new_array = '\0';
strcpy(arr, new_array);
return;
}

int main() {
char arr[] = "My job is coding";
int size = sizeof(arr);
reverse_words(arr, size);
printf("%s", arr);
return 0;
}

最佳答案

你的代码太复杂了,有几个问题:

  • 您分配了太多内存:(char*)malloc(sizeof(char*) * size); 分配了 size 指针大小的倍数。使用 malloc(size); 分配 size 字节。
  • 你的指针操作有误,
  • 您忘记释放分配的内存,导致内存泄漏。
  • 不需要传递数组的大小,字符串的长度是通过扫描空终止符来计算的,只需为空终止符分配一个额外的字节即可。

有一个替代解决方案可以在不分配内存的情况下将字符串中的单词反转:

  • 对于每个单词,反转单词
  • 最后一步:反转字符串

下面是使用效用函数的代码:

#include <stdio.h>

void reverse_mem(char *str, int size) {
for (int i = 0, j = size; i < --j; i++) {
char c = str[i];
str[i] = str[j];
str[j] = c;
}
}

void reverse_words(char *arr) {
for (int i = 0, j = 0;; i = j) {
for (; str[i] == ' '; i++)
continue;
if (str[i] == '\0')
break;
for (j = i; str[j] != '\0' && str[j] != ' '; j++)
continue;
reverse_mem(str + i, j - i);
}
reverse_mem(str, size);
}

int main(void) {
char arr[] = "My job is coding";
reverse_words(arr);
printf("%s\n", arr);
return 0;
}

关于c - 使用三个指针反转字符串中的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47376654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com