仅反转C中句子的顺序

时间:2016-08-03 15:41:21

标签: c arrays string pointers reverse

我一直在尝试使用指针来反转包含字符串的句子的顺序。我的代码片段:

int main()
{
char c[50];
char *ptr;
int i=0,len;
gets(c);
ptr=c;
len=strlen(c);
for(i=len-1;i>=0;i--)
  printf("%c",*(ptr+i));
return 0;
}

此代码生成正确输入的字符串的反转。例如:
输入:你好吗?
输出:uoy era woh

但是我记住的是完全不同的,我只是希望句子中的单词的顺序颠倒而不是要反转的确切单词。 例如,对于相同的输入“你好吗”,我希望输出为“你是如何”。我已经打破了很长一段时间了。有什么东西我不见了吗?

重新编辑:我想只使用指针和指针来做反向概念!这就是我发布新问题的原因!!!

正如另一个用户所建议的那样,我也尝试使用strtok()函数,我的输出工作得很好,但却抛出了垃圾值....请帮助这个上下文::

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

int main()
{
char c[50],d[50];
char *ptr,*aptr,*tok;
int i=0,j=0,len;
gets(c);
ptr=c;
aptr=d;
len=strlen(c);
printf("%d\n",len);
for(i=len-1;i>=0;i--,j++)
  *(aptr+j)=(*(ptr+i));
for(i=0;i<len;i++)
 printf("%c",d[i]);
printf("\n");
tok=strtok(aptr," ");
while(tok!=NULL)
{
 printf("%s\n",strrev(tok));
 tok=strtok(NULL,aptr);
}
return 0;
}

和我终于找到了最优化的答案!!!!

#include <stdlib.h>

int main()
{
char s[20][20];
int i=0,length=-1;
for(i=0;;i++)
{
    scanf("%s",s[i]);
    length++;
    if(getchar()=='\n')
        break;
}
for(i=length;i>=0;i--)
    printf("%s ",s[i]);
return 0;
}

1 个答案:

答案 0 :(得分:0)

spacebar之后或开头时打印字符串:

for(i=len-1;i>=0;i--)
  if (i==0) || (*(ptr+i-1)==' ') { 
    printf("%s ",*(ptr+i));
    if (i!=0)
      *(ptr+i-1)='\0'; // Cutting the next print. Attention: that changes the original string.
  }
return 0;