//用指针的方式来逆序,再逆序;
#include<stdio.h>
#include<string.h>
int main()
{
char a[] = "you are from shanghai";
char temp;
char *p1 = a;
char *p2 = a + strlen(a) - 1; //找到尾指针;
//将整个字符串逆序;
while(p1 < p2)
{
temp = *p1;
*(p1++) = *p2;
*(p2--) = temp;
}
// printf("%s",a);
puts(a);
putchar('\n');
//再进行单词的逆序,遇到一次空格的也就是找到一个单词,然后对这个单词进行逆序;
p1 = a;
p2 = a;//p1 p2 都指向新的a[];
char *p3 = NULL;
while(*p2) //让*p2开始往后遍历空格,直到'\0';
{
if(*p2 == ' ') // 判断找到空格
{
p3 = p2 -1;
while(p1 < p3) //循环交换单词的前后单词;
{
temp = *p1;
*(p1++) = *p3;
*(p3--) = temp;
}
p1 = p2 + 1;
}
p2++;
}
//这边当p2等于'\0'时,对'\0'前面的一个单词进行逆序;
p3 = p2 -1;
while(p1 < p3)
{
temp = *p1;
*(p1++) = *p3;
*(p3--) = temp;
}
puts(a);
putchar('\n');
return 0;
}
这个当中用了不少if():这是一个判断语句,只是执行一次
而while():这是循环语句,知道括号里的内容为假推出循环(0为假);不要混淆他们的用法!!
-----------------------------------------------------------------------------------------------------------分割线2017.07.19----------------------------------------------------------------------------------------
//使用函数处理you are from shanghai 逆序问题;
#include<stdio.h>
#include<string.h>
//void nixu(char)
void nixu(char *arr)
{
int min = 0;
int len = strlen(arr);
int max = len-1;
while(max > min)
{
char temp;
temp = arr[min];
arr[min++] = arr[max];
arr[max--] = temp;
}
}
int main()
{
char arr[] = "you are from shanghai";
//先整个数组完全逆序;
nixu(arr);
//再单词逆序
char *p1 = arr;
char *p2 = arr;
while(*p2)
{
if(*p2 == ' ')
{
*p2 = '\0'; //把空格置'\0',以便于调用的函数可以计算单词的长度len;(因为写的函数当中用到了计算单词长度的strlen,必须要有'\0')
nixu(p1);
*p2 = ' ';
p1 = p2+1;
}
p2++;
}
nixu(p1);
puts(arr);
return 0;
}
详细说一下strlen():t=这个函数可以用来要计算字符串的实际长度,因为在写字符串的时候会默认给它后面补上'\0',所以strlen()就是找到'\0',计算'\0'之前的长度;