写在前头:
本人写的文章主要面向的是初学者,内容可能过于啰嗦,请见谅。
题目要求:
输入两个字符串,将其合并为一个字符串后输出。
输入格式:
输入两个字符串
输出格式:
输出合并后的字符串
例子:
思路解析:
- 我们需要字符型数组存放字符串
- 我们需要gets()来获取字符串
- 我们需要一个方法来使两个字符串结合
ps:gets()方法在《计蒜客——各个单词的长度》文章中有介绍
话不多说,直接上代码:
#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
int main()
{
char s1[100],s2[100];
int k=0;
char *p=s1,*q=s2;
gets(s1);
gets(s2);
while(*p)
p++;
while(*p++=*q++);
cout<<s1;
}
源码介绍:
while(*p++)==>(等价于)while(*(p++))
这句话的意思是先取出*p的值,然后让指针指向下一个数据。
在这里面*和++同一优先级,顺序从右往左,++是后置,需要先执行完语句才做自增
所以分成两条语句,必然是:
- *p;
- p++;
while(*p)
p++;
是指只要指针p指向的内容不为空,就执行p++操作,即指向下一内容
while(*p++=*q++);
实现功能是把q指针指向地址单元的值赋给P指针指向的地址中,且每次完成赋值后,移动指针,进行下一次赋值,直到q指针指向字符串结束符时,退出while循环,功能为把q指向的字符串复制到p指向的地址中。
- 取q的值,再赋予给p,q到下一个(q+1),p到下一个(p+1),完成第一个while循环
- 取q+1的值,再赋予给p+1,q+1到下一个(q++2),p+1到下一个(p+2),完成第二个while循环
解引用介绍:
" * "的作用是引用指针指向的变量值,引用其实就是引用该变量的地址,“解”就是把该地址对应的东西解开,解出来,就像打开一个包裹一样,那就是该变量的值了,所以称为“解引用”。也就是说,解引用是返回内存地址中对应的对象。