olleh , enoyreve ! I ma sesenihC !
两种方法分别如下:
(一)
#include<string.h>
#include<stdio.h
#include<stdlib.h>
int *reverse(char *s, char *t)
{
char *p1, *p2;
if(s==NULL || t==NULL)
{
return NULL;
}
p1=s+strlen(s)-1;
p2=p1;
while(p1!=s)
{
if (*p1==' ')
{
int len=p2-p1;
memcpy(t,p1+1,len);
t+=len;
*t++=' ';
p1--;
p2=p1;
}
else
p1--;
}
int len=p2-p1+1;
memcpy(t,p1,len);
t+=len;
*t++='\0';
}
int ppp(char *p, int m)
{
int r;
for(r=0;r<m;r++)
{
if(p[r]==' ')
printf(" ");
else
printf("%s",p[r]);
}
printf("\n");
}
int main()
{ char *t;
t=(char*)malloc(sizeof(char)*10);
char a[100];
gets(a);
int n=strlen(a);
ppp(a, n);
reverse(a,t);
ppp(t,n);
return 0;
}
(二)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int inverse(char *p,int star,int end)
{
char *t;
t=(char*)malloc(sizeof(char)* (end-star));
memset(t,0,end-star);
int i;
for (i=0;i<(end-star);i++)
t[i]=p[end-i-1];
memcpy(p+star,t,end-star);
free(t);
}
int main()
{
char p[1000];
char ch;
int word_long=0,word_flag=0;
int i=0;
gets(p);
do
{
if (p[i++]== ' ')
{
inverse(p,word_flag,word_flag+word_long);
word_flag+= word_long+1;
word_long = 0;
}
else
word_long++;
} while (p[i]!='\0');
inverse(p,word_flag,word_flag+word_long);
puts(p);
}
第二种:hello , everyone ! I am Chinese !
! esenihC ma I ! enoyreve , olleh
#include<stdio.h>
#include<string.h>
int main()
{
char a[100];
gets(a);
int i,t;
for(i=0;i<strlen(a)/2;i++)
{
t=a[i];
a[i]=a[strlen(a)-i-1];
a[strlen(a)-i-1]=t;
}
printf("%s",a);
}
第三种:hello , everyone ! I am Chinese !
! Chinese am I ! everyone , hello
#include<stdio.h>
#include<string.h>
int reverse(char *s, int start, int end)
{
char t;
while(end>start)
{
t=s[start];
s[start]=s[end];
s[end]=t;
start++;
end--;
}
}
int main()
{
int a=0, b=0;
char s[100];
gets(s);
reverse(s,0,strlen(s)-1);
int i=0;
while(i<strlen(s))
{
while(s[i]==' ' && i<strlen(s))
{
i++;
}
a=i;
while(s[i]!=' ' && i<strlen(s))
{
i++;
}
b=i-1;
reverse(s,a,b);
}
puts(s);
return 0;
}