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