【通过操作指针,与指针做函数參数'实现字串在主串中出现的次数,然后将出现的部分依照要求进行替换 】
#include<stdio.h>
#include<stdlib.h>
int strTime(const char *str1, const char *str2, int *time)
{
int count = 0;
char *p1 = str1;
char *p2 = str2;
//p1是第一次出现的位置
p1 = strstr(p1, p2);
//注意这里不要写成*p1!=NULL 由于p1 是null的地址一旦读取*p1 会出错的!!!!不能读取操作系统的数据
//千万不要写成 *p
//while (*p1 != '\0')
//while (p1 != NULL)
while (p1)
{
count++;
//让指针向后移动str2长度个位置
p1 = p1+strlen(str2);
//找到下一次出现的位置
p1 = strstr(p1, p2);
}
*time = count;
return 1;
}
//这里也能够实现出现次数的查询
/*int strTime(const char *str1, const char *str2, int *time)
{
char *p = NULL;
int count = 0;
char *sub = NULL;
p = str1;
sub = str2;
do
{
p = strstr(p, sub);
if (p != NULL)
{
count++;
p = p + strlen(sub);
}
else
{
break;
}
} while (*p != '\0');
*time = count;
}*/ int getRes2(const char *str, const char *substr, int *time, char **buf2)
{
char *buf = (char *)malloc(strlen(str)*sizeof(char));
char *pbuf = buf;
//进行字符串的替换
char *p = NULL;
char *sub = NULL;
p = str;
sub = substr;
int flag = 4;
//仅仅要是不相等的情况下就将字符复制到buf中
char *point = "dcba";
while (*p != '\0')
{
if (*p != *sub)
{
*buf = *p;
buf++;
p++;
//printf("%s\n", pbuf);
}
//想等情况下也就是找到了须要替换的位置
else
{
for (int i = 0; i < flag; i++)
{
*buf = *point;
buf++;
point++;
// printf("%s\n", pbuf);
}
//控制4321循环
flag--;
//这里须要将离开了"dcba"首地址的指针又一次定位回去
point = "dcba";
if (flag == 0)
{
flag = 4;
}
//相等的时候须要让p指针跨越四个字节也就是他下一次进行查找的位置
p += 4;
}
}
//对末尾的加上字符串结束标志防止输出时乱码
*buf = '\0';
//二级指针的典型使用方法
*buf2 = pbuf;
}
void main()
{
char *str1 = "abcd11111abcd2222abcdqqqqqabcd11111abcd2222abcdqqqqqabcd11111abcd2222abcdqqqqq";
char *str2 = "abcd"; int time = 0;
//1求字符串"abcd"出现的次数
strTime(str1, str2, &time);
printf("出现的次数是%d\n", time);
char *buf = NULL;
//把字符串替换成(dcba11111dcb2222dqqqqqdd11111dcba.....)
//注意特点逆序后,每次字符少一个,四次一循环;
getRes2(str1, str2, &time, &buf);
printf("原来的字符串 %s\n", str1);
printf("替换后的字符串 %s\n", buf);
system("pause");
}
【通过操作指针,与指针做函数參数'实现字串在主串中出现的次数,然后将出现的部分依照要求进行替换 】的更多相关文章
- Effective JavaScript Item 55 接受配置对象作为函数參数
接受配置对象作为函数參数 尽管保持函数接受的參数的顺序非常重要,可是当函数可以接受的參数达到一定数量时.也会让用户非常头疼: var alert = new Alert(100, 75, 300, 2 ...
- C++容器类对象函数參数问题
总之中的一个句话:容器类对象作为函数參数,与整数类型作为函数參数的传递特性同样. 验证程序 #include "stdafx.h" #include <iostream> ...
- JavaScript的最大函数參数长度和最大栈深度检測
一般代码也许不会涉及最大參数长度和最大栈深度,但某些特殊场合,检測这两个參数还是有必要的.比如:用递归计算斐波那契数列的第n个值,不了解最大栈深度,难免显得肤浅.又比如:将一串charCode转成St ...
- 各种python 函数參数定义和解析
python 中的函数參数是赋值式的传递的,函数的使用中要注意两个方面:1.函数參数的定义过程,2.函数參数在调用过程中是怎样解析的. 首先说一下在python 中的函数调用过程是分四种方式的.这里且 ...
- cmake函数參数解析
近期在迁移公司的make系统到cmake上.发现cmake的function參数非常奇怪.比如,假设我们向一个function传递list作为參数,在function中,形參会变成例如以下状况: se ...
- C语言函数參数传递原理
C语言中參数的传递方式一般存在两种方式:一种是通过栈的形式传递.还有一种是通过寄存器的方式传递的. 这次.我们仅仅是具体描写叙述一下第一种參数传递方式,第二种方式在这里不做具体介绍. 首先,我们看一下 ...
- C语言中的system函数參数具体解释
http://blog.csdn.net/pipisorry/article/details/33024727 函数名: system 功 能: 发出一个DOS命令 用 法: int sy ...
- 【VBA研究】VBA自己定义函数參数类型不符的错误
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/iamlaosong/article/details/36871769 作者:iamlaosong 1 ...
- C/C++——指针,引用做函数形参
函数中的形参是普通形参的时,函数只是操纵的实参的副本,而无法去修改实参. 引用形参是对实参的直接操纵,指针形参是对 它所指向的值(*p) 的直接操纵,但是对于这个指针变量(p)来说,依然只是副本. 指 ...
随机推荐
- linux编curlDLL库so
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) curl库是一个非常强大的http开源库.c++里面可以非常方便的和httpserver交互. 近期项目開 ...
- 最近ubuntu 14.04 cpu高入住故障排除
最近linux始终使用cpu实现全值, 双核cpu这始终是一个核心100%,还有的正常核.top这一发现输入法框架fcitx加载,直接kill它,不能用于发现狗输入法,令: fcitx fcitx-q ...
- 在域信任环境中使用 Team Foundation Server (TFS 2013)
原文:在域信任环境中使用 Team Foundation Server (TFS 2013) 1. 用户情景和方案: XX公司的大部分软件产品通过软件外包的方式由开发商完成.为加强对软件开发的进度和质 ...
- enq: TX - row lock contention 参数P1,P2,P3说明
enq: TX - row lock contention三个参数,例如,下面的等待事件 * P1 = name|mode <<<<<<< ...
- Ubuntu 当黑屏解决方案安装
前几天我就已经安装Red hat 企业版,只是可惜它并没有提供数据源.我能够安装自己的软件,但我不能完全靠解决,因此,我们决定改变系统,最后我选择ubuntu.随时下载系统.然后用u盘制作启动盘,全部 ...
- eclipse 配置android sdk和maven
首先下载 ADT-22.2.0.rar eclipse-jee-kepler-R-win32-x86_64.zip android SDK4.2.zip 分别解压在一个盘 将ADT里面的两个目录内容相 ...
- SPOJ104 Highways,跨越数
高速公路(SPOJ104 Highways) 一个有n座城市的组成国家,城市1至n编号,当中一些城市之间能够修建快速公路.如今,须要有选择的修建一些快速公路.从而组成一个交通网络.你的任务是计算有多少 ...
- gcd&&lcm
1011 最大公约数GCD 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 输入2个正整数A,B,求A与B的最大公约数. Input 2个数A,B,中 ...
- BroadcastReceiver.PendingResult类别
java.lang.Object android.content.BroadcastReceiver.PendingResul 类概述 状态的结果正在等待一个广播接收器.在BroadcastRecei ...
- ASP.NET——两个下拉框来实现动态联动
介绍: 在网页中.我们常常会遇到下图中的情况.首先在下拉框中选择所在的省.选择之后,第二个下拉框会自己主动载入出该省中的市.这样设计极大的方便了用户的查找.那这是怎样实现的呢? 1.建立数据库 &qu ...