您的位置:首页 > 大数据 > 人工智能

用指针来完成“you are from shanghai”逆序

2017-07-16 20:32 288 查看
//用指针的方式来逆序,再逆序;
#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);

4000
*p2 = ' ';
p1 = p2+1;
}
p2++;
}

nixu(p1);
puts(arr);

return 0;
}
详细说一下strlen():t=这个函数可以用来要计算字符串的实际长度,因为在写字符串的时候会默认给它后面补上'\0',所以strlen()就是找到'\0',计算'\0'之前的长度;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 指针 逆序
相关文章推荐