按址索骥,直捣黄龙-指针法在字符串str中每个ch2字符后都添加一个ch3字符

利用数组名和下标操纵数组中的数据是“我喊你的名字,你敢答应吗”。由编译器帮你翻译,找地址,存取数据。

利用指针法操纵数组是“按址索骥,直捣黄龙”。直接找到地址,然后进行操纵数据。

初学指针者,问题比较多。

无他,唯多看程序、多写程序,方可“救治”。

下面我们针对一道熟悉的题目来看一看指针怎样处理字符串。

一、题目描述

请把下面的函数补充完整:

void func(char *str, char ch2, char ch3)

{//str存储某个字符串的首地址

//要求在str中每个ch2字符后面都添加一个ch3字符

}

二、原理介绍

1、另设一个字符数组str2,大小为str中字符长度的二倍多一。因为若str的长度为n,且这n个字符全部为ch2,则插入ch3后长度为2*n,再加上结束符\0,需要空间2*n+1.

2、对于str中的每个字符进行操作,先把其放入str2,然后对其值进行判断,如果其是ch2,则把ch3也放入

3、最终在str2结尾放入一个'\0'表示串的结束

4、把str2中字符串拷贝回str

三、实现

#include <stdio.h>
#include <string.h>
#include <ctype.h>
void func(char *str, char ch2, char ch3)
{
	char *pb,*pc;
	pb=str;	
	int n;
	n=strlen(str);//字符串的长度 
	char str2[2*n+1] ;//另设一数组,以空间换时间 
	pc=str2; 
	
	while(*pb!='\0')
	{
		*pc=*pb;//原字符复制 
		pc++; 		
		if(*pb==ch2)
	    {		    
	        *pc=ch3;//插入新字符 
	        pc++;
	    }
	    pb++;
	    
	}
	*pc='\0' ; 
	//此时n、p都不再指向数组B、C的首地址了 
    strcpy(str,str2);//把更改后的串复制回B指向的空间 
}

int main()
{
    char s[1000]="acagazax",ch2='a',ch3='*';
	//在所有的字符a后面都添加字符* 
    func(s,ch2,ch3);
    puts(s);
    return 0; 
}

用好了指针,就不用下标了,

想一想,*p和p[i],会少输入两个字符呢

能减少手指敲键盘的次数,减少得腱鞘炎的几率

想起来,半夜都能笑醒呢!

 

注:char str2[2*n+1] 是C99的语法,变长数组。

可以用动态数组替代:

char *str2;

int n=strlen(str);

str2=(char*)malloc(2*n+1);//临时空间

if(str2==0)     exit(-1);//异常退出程序

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值