"I am from shanghai"的多种倒序输出方式,“shanghai from am I”

1.指针,遇到空格对单词进行倒序,最后对字符串倒序。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define SIZE    5
int main()
{
   char str[]= {"i am from shanghai"};
   char *p1 = str;
   char *p2 = str + strlen(str) - 1;
   char tmp;
   char *p3 = NULL;
 

 while(p1 < p2)

   {
       tmp = *p1;
     *(p1++) = *p2;
  *(p2--) = tmp;
   }


 printf("%s\n",str);
   p1 = str;
   p2 = str;


   while(*p2)
   {


  if(*p2 == ' ')
 {
    p3 = p2 -1;
    while(p1 < p3)
    {
      tmp = *p1;
      *(p1++) = *p3;
      *(p3--) = tmp;
    }
    p1 = p2 + 1;
  }
 p2++;


   }


    printf("%s\n",str);
    return 0;

}

2.用二维数组,很容易理解。

#include <stdio.h>
#include <string.h>


/*char * gets(char *a)
{
scanf("%s",a);
}*/
int main()
{
int i=0,j=0,k=0,length;
char a[150] = {0}/*="i am from shanghai , and you asd sdfg wer"*/, b[150][150];
printf("Please input a sentence:\n");
gets(a);
//scanf("%s",  a);
printf("%s\n", a);


for(i = 0; i < strlen(a); i++)
{
if(' ' == a[i])
{
b[j][k]=' ';
b[j][k+1]='\0';
j++;
k = 0;
continue;
}


b[j][k] = a[i];
k++;
}


printf("%s ",b[j]);
for(i = j-1; i >= 0; i--)
printf("%s",b[i]);
printf("\n");


return 0;
}

3.用指针。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
char c;
char *str= (char *)malloc (sizeof(char) * 20);
if (NULL == str)
{
printf("malloc failure\n");
}
    
char *t = str;
printf("please input:\n");
while((c = getchar()) != '\n')
{
*str++ = c;
}
str = t;
while(*str != '\0')
{
if (*str == ' ')
{
*str = '\0';
}
str++;
}
str--;


while(str != t)
{
if(*str == '\0')
{
printf("%s ",str+1);
}
str--;
}
printf("%s\n",t);

return 0;
}

4.用指针数组。

#include <stdio.h>
#include <stdlib.h>


int main ()
{
int i;
char *a[5]={0};


for(i = 0; i < 5; i++)
{
a[i] = (char*)malloc(sizeof(char) * 20);
if( NULL == a[i])
{
printf("failure\n");
exit(1);
}
scanf("%s",a[i]);
}
for(i = 4; i >= 0; i--)
{
printf("%s ",a[i]);
}
printf("\n");
return 0;
}

5.这是我自己学一维数组时写的,有点错误但是理论上是可以的。希望有人能加以修改。

#include <stdio.h>
#include <string.h>


int main()
{
int i,l,k,length;
char str[50]="I am from shanghai",ptr[50];
l = sizeof (str);
for(i = 0; i < l; i++)
{
length = sizeof (str);
if(' ' == str[i])
{
for(k = 0; k<= i; k++)
ptr[length - i + k-1] = str[k];
for(k = 0; k <= length - i; k++)
str[k] =str[k + i+1];
i = 0;
}
else if('\0' == str[i])
{
for(k = 0; k < i; k++)
ptr[k] = str[k];
ptr[i] = ' ';
break;
}
}


for(i =0; i < l; i++)
printf("%c",ptr[i]);



return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值