【发布时间】:2016-08-03 15:41:20
【问题描述】:
我一直在尝试使用指针反转包含字符串的句子的顺序。我的代码 sn-p:
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
但我记住的是完全不同的,我只是希望句子中单词的顺序颠倒,而不是确切的单词颠倒。 例如,对于相同的输入“you are how”,我希望输出为“you are how”。我已经打破我的头很长一段时间了。我有什么遗漏吗???
重新编辑:我只想使用指针和指针来做相反的概念!!!这就是为什么我发布一个新问题!!!
根据另一位用户的建议,我也尝试使用 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;
}
【问题讨论】:
-
是的,你反转每个单词的字符而不是每个完整的单词。这就是问题所在。
-
用空格分割字符串并将每个单词存储在一个字符串中,然后颠倒字符串的顺序。
-
我不熟悉 C 但我没有看到任何将其拆分为单词的代码。
-
strtok() 可能是一个起点
标签: c arrays string pointers reverse