用c语言实现字符串倒序的几种情况

第一种:hello , everyone ! I am Chineses !

                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;
}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值