-
题目:运用指针技术实现,将输入的两个字符串中第二个字符串插入到第一个字符串中指定输入数字位置字符的后面。(10分)
代码如下:
#include<iostream>
using namespace std;
int main(){
char str1[100];
char str2[100];
char c[200];
int i;
int n;
cout<<"输入插入的位置"<<endl;
cin>>n;
cin.ignore();
cin.getline(str1,100);
cin.getline(str2,100);
char *p1=str1;
char*p2=str2;
char*p=c;
for(i=0;i<n;i++){
*p++=*p1++;
}//将前n个插入
while (*p2)
{
*p++=*p2++;
}//将p2插入
while(*p1){
*p++=*p1++;
}
*p=0;//确保字符串最后以0结尾
for(i=0;c[i]!=0;i++){
cout<<c[i];
}
return 0;
}
关于指针的赋值
初学者容易错误将指针赋值:
char *p1;
*p1 = str1;
-
第一行相当于定义了一个指针变量但是没有初始化,将会随机被分配给任何一个地址这是非常危险的。而第二行代码,*p相当于随机地址中的第一个字符,将一个指针变量赋值给一个字符变量,是不正确的。
-
区别
p = p1
与*p=*p1
前者是改变p1指针的指向,使得两个指针指向同一个地址,后者是把p1指向的值赋值给p
-
代码中
*p++=*p1++;
,是常用的指针与数组结合的操作,实际上分为三步:*p=*p1 //把p1指向的值赋值给p指向的值 p++; p1++;//两者的指向都往后移动
-
*p=0;//确保字符串最后以0结尾
-
这是常见的字符数组赋值循环
while(*p1){ *p++=*p1++; }