指针形式访问字符串
2013-01-19 15:21 lefan 阅读(608) 评论(0) 编辑 收藏 举报在大二考程序语言时,就只是对着一百多道题目使劲的做了,好多概念还是稀里糊涂的,今天看到个小例子,使用C++来说实现指针形式访问字符串,拿来学习。使用指针玩字符串,“神奇的指针哟,指向整型的指针int *p1,可以操作整型数组int a[];指向字符型的指针char *p2,可以操作字符数组(字符串)char str[];指向指针的指针可以操作二维数组。”更灵活的是,在函数的传递中,指针、数组名在一定程度上可以互换。试图通过编制操作字符串的函数,实现字符串的操作。
实现的功能:字符串str1和str2连接,连接后的结果存放到str1中
用数组名作形参:void astrcat(char str1[], const char str2[])
用指针作形参:void pstrcat(char *str1, const char *str2)
参考代码:
1 //字符串连接函数实现和测试示例 2 #include <iostream> 3 using namespace std; 4 void astrcat(char str1[], const char str2[]); 5 void pstrcat(char *str1, const char *str2); 6 int main(void) 7 { 8 char s1[50]="Hello world. "; 9 char s2[50]="Good morning! "; 10 //从下面的调用中可以体会数组、指针本质上的相同一面 11 astrcat(s1,s2); //参考1楼评论,合并后s1放不下怎么办? 12 cout<<"连接后:"<<s1<<endl; 13 pstrcat(s2,s1); 14 cout<<"连接后:"<<s2<<endl; 15 return 0; 16 } 17 18 19 //作为示例,本函数采用了形参为数组,在实现中,直接用下标法进行访问 20 //实际上,在实现中,完全可以用指针法访问 21 void astrcat(char str1[], const char str2[]) 22 { 23 int i,j; 24 //请理解:以下所有str1[i]可以替换为*(str1+i),str2[j]可以…… 25 for(i=0;str1[i]!='\0';i++); //找到str1的结束 26 for(j=0;str2[j]!='\0';i++,j++) 27 { 28 str1[i]=str2[j]; 29 } 30 str1[i]='\0';//切记!! 31 return; 32 } 33 34 35 //在实现中,str1用指针法访问,而str2用下标法访问 36 //在实际工程中,这种风格并不好,要尽可以用同一种方式,一般而言,指针法效率更高 37 //此处str2用下标法访问,除了作为示例的考虑外,还有一个难言之隐 38 //如果声明char *q,并用q=str2、q++等操作str2,这是非法的。因为str2有const的限制,从而赋值不兼容 39 void pstrcat(char *str1, const char *str2) 40 { 41 char *p; 42 int i; 43 for(p=str1;*p!='\0';p++); //找到str1的结束 44 for(i=0;str2[i]!='\0';i++,p++) 45 { 46 *p=str2[i]; 47 } 48 *p='\0';//切记!! 49 return; 50 }