This question already has answers here:
how to perform reversing a sentence Word by Word in C?
(12个答案)
Reversing words in a sentence
(10个回答)
3年前关闭。
我一直在尝试使用指针来反转包含字符串的句子的顺序。我的代码段:
这段代码会生成与我正确输入的字符串相反的字符串。例如:
输入:你好吗
输出:uoy时代哇
但是我要记住的是完全不同的,我只希望句子中单词的顺序颠倒,而不是确切的单词颠倒。
例如,对于同一输入“您好吗”,我希望输出为“您好吗”。我已经伤了我一段时间了。我缺少什么吗???
重新编辑:我只想使用指针和指针做相反的概念!!!多数民众赞成在为什么我发布为一个新的问题!
正如另一个用户所建议的那样,我也尝试使用strtok()函数,并且我的输出工作正常,但会抛出垃圾值。...对此上下文有帮助:
我终于找到了最优化的答案!
(12个答案)
Reversing words in a sentence
(10个回答)
3年前关闭。
我一直在尝试使用指针来反转包含字符串的句子的顺序。我的代码段:
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时代哇
但是我要记住的是完全不同的,我只希望句子中单词的顺序颠倒,而不是确切的单词颠倒。
例如,对于同一输入“您好吗”,我希望输出为“您好吗”。我已经伤了我一段时间了。我缺少什么吗???
重新编辑:我只想使用指针和指针做相反的概念!!!多数民众赞成在为什么我发布为一个新的问题!
正如另一个用户所建议的那样,我也尝试使用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;
}
最佳答案
在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;
08-06 00:46