大家先看看这道题目的描述:
通过这一道题,我想写一点自己对自己初次学习指针的心得看法,这个指针系列我还是会继续更新的,毕竟人都是经历了才会成长,那学习了才会提升对吧(如果这里我理解指针有错误大家可以给我批评指正,因为我需要学习! )
1.指针可以取出数组的第一个元素的地址从而可以达到遍历数组的作用.
我还是喜欢写题的时候先想思路:
1)观察i like beijing. 发现我可以通过下面的操作把这句话给它弄成我需要的内容.
其实很简单:
第1步一> i ekil .gnijieb 其实变成这样就是为了让一句话全部转置对吧?
第2步—> beijing. like i 其实说白了就是每一个单词的转置对吧?
第3步—> 打印啦.
2)为了初学者能够理解我的思路,下面我会注释加分割.
include<stdio.h>
include<string.h>
void revers(char left,char right)
{
//下面这个方法就是 1 2 3 4 5
//5 与 1交换然后 依次交换 直到left==right 这不跳出while 循环了嘛,所以拿这个例子你去理解下面这个 代码
//
while(left<right)
{
char temp=*right;
*right=*left;
*left=temp;
left++;
right--;
}
//看完这个咱还回去哈..
}
//这里先打出c语言主函数部分并且注释学习.
int main()
{
char arr[100];
//gets函数去输入. 小技巧:gets一次输入一行代码. getchar一次输入一个字符
gets(arr);
char* cur=arr;
//这里 用指针cur加* 去取走数组arr的第一个地址.
while(*cur)
{
char* start = cur;
char* end = cur;
//这样定义start 是保存初地址,也可以理解为第一个元素的下标.
//end 是为了遍历我的字符串对吧?目的也就是找独立的单词.
while(*end!=' ' && *end!='\0')
{
end++;
}
//定义一个函数然后作用是为了单词转置,把俩地址传过去.好,我们去瞅瞅定义的函数吧. 向上
//看吧
revers(start,end-1);
//
if(*end!='\0')
{
cur=end+1;
}
else
{
cur=end;
}
//为下一个单词做准备
}
//打印出去
int len=strlen(arr);
revers(arr,arr+len-1);
printf("%s",arr);
return 0;
}
下面来试试先全部转置再单词转置.
上面是先转置单词再全部转置.
我本人建议自己先学第一种方法然后自己去学我给你这种思路的代码,非常相似,所以自己敲敲锻炼一下自己对于指针的使用.
include<stdio.h>
include<string.h>
void reverse(char left,char right)
{
while(left<right)
{
char temp=*left;
*left=*right;
*right=temp;
left++;
right--;
}
}
int main()
{
char arr[101];
gets(arr);
int len=strlen(arr);
reverse(arr, arr+len-1);
//每个单词的逆序.
char* cur=arr;
while(*cur)
{
char* start=cur;
char* end=cur;
while(*end!=' ' && *end!='\0')
{
end++;
}
reverse(start,end-1);
if(*end!='\0')
{
cur=end+1;
}
else
{
cur=end;
}
}
printf("%s",arr);
return 0;
}
蟹蟹你完我的文章,希望爱学习编程的一起进步一起学习,编程路漫漫,蟹蟹有你们相伴(虽然现在没啥人哈哈).