我试图扭转字符串的单词(而不是单词本身)。我试图仅使用指针动态分配2维数组(不使用数组语法)。我的程序编译得很好,但最终只显示一个单词作为输出,其中包含空格。这是我的代码。
#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 is my input
输出
This
答案 0 :(得分:1)
这是一个非常棘手的问题(反转字符串中的单词)。解决此问题的最佳解决方案之一是定义一个函数来反转整个字符串,然后开始逐字逐句读取结果字符串,如果到达空格,再次使用反向函数并打印它。
原始字符串
你好世界
第一步
dlrow olleh
第二步
世界你好
此解决方案比复杂的解决方案容易得多。
这可能是我上面提到的reverse
函数:
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;
}