Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅颠倒C中句子的顺序_C_Arrays_String_Pointers_Reverse - Fatal编程技术网

仅颠倒C中句子的顺序

仅颠倒C中句子的顺序,c,arrays,string,pointers,reverse,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 但我记住的是完全不同的,我只是想把句子中单词的顺序颠倒

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

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;
}
#包括
#包括
int main()
{
字符c[50],d[50];
字符*ptr、*aptr、*tok;
int i=0,j=0,len;
获取(c);
ptr=c;
aptr=d;
len=strlen(c);
printf(“%d\n”,len);
对于(i=len-1;i>=0;i--,j++)
*(aptr+j)=(*(ptr+i));
对于(i=0;i=0;i--)
printf(“%s”,s[i]);
返回0;
}

在空格键之后或开头打印字符串:

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;

是的,你可以反转每个单词的字符,而不是每个完整的单词。这就是问题所在。将字符串按空格拆分,并将每个单词存储在一个字符串中,然后颠倒字符串的顺序。我不熟悉C,但我没有看到任何将其拆分为单词的代码。可能是起始点或的可能副本
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;