gpt4 book ai didi

c - 纯粹使用指针动态分配二维数组

转载 作者:行者123 更新时间:2023-11-30 21:43:40 25 4
gpt4 key购买 nike

我正在尝试反转字符串的单词(而不是单词本身)。我试图仅使用指针动态分配二维数组(不使用数组语法)。我的程序编译得很好,但最终只显示一个单词作为输出,到处都有空格。这是我的代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void rev(char *x, int n);
int words(char * p);

int main()
{
char *p = (char *)malloc(101*sizeof(char));
fgets(p, 101, stdin);
rev(p, words(p));
free(p);
return 0;
}

void rev(char *x, int n)
{
char **y = (char **)malloc(101*sizeof(char *));
int i = 0;

int *j = (int *)calloc(101, sizeof(int));
*y = (char *)malloc(101*sizeof(char));
while(*x!='\n')
{
if(*x==' ')
{
i++;
*(y+i) = (char *)malloc(101*sizeof(char));
}
else
{

*(*(y+i)+(*(j+i))) = *x;
(*(j+i))++;
}
x++;
}
i++;
int z, q;
for(z=i-1; z>0; z--)
{
for(q=0; q<(*(j+i)); q++)
{
printf("%c", *(*(y+z)+(q)));
}
printf(" ");
}
for(q=0; q<*j; q++)
{
printf("%c", *(*(y)+(q)));
}
printf("\n");
for(q=0; q<i; q++)
{
free(y+i);
}
free(j);
free(y);
}

int words(char * p)
{
int x = 0;
while(*p!='\n')
{
if(*p==' ')
{
x++;
}
p++;
}
return ++x;
}

我只想使用指针算术来做到这一点。过去20个小时我一直在尝试,但无法弄清楚。有人可以解释这个错误以及如何纠正它吗?输入 Hello World 输出

 Hello

输入这是我的输入输出

    This

最佳答案

这是一个非常棘手的问题(反转字符串中的单词)。解决此问题的最佳解决方案之一是定义一个函数来反转整个字符串,然后开始逐字读取结果字符串,如果到达空格,请再次使用反转函数并打印它。

原始字符串

hello world

第一步

dlrow olleh

第二步

world hello

这个解决方案比您复杂的解决方案容易得多。

这可能是我上面提到的一个可能的反向函数:

void rev(char *word, int len)
{
char c;
if(len>1)
{
c=word[len-1];
word[len-1]=word[0];
word[0]=c;
rev(word+1, len-2);
}
return;
}

关于c - 纯粹使用指针动态分配二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36623896/

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