c/c++中串的处理及串的相关操作实现

c语言中字符串以字符数组的形式存储。以字符常量‘\0’结尾,‘\0’是值为0的字符,是空字符。

在头文件string.h中定义了一系列字符串的操作。如strlen(),strcpy(),strcmp()等。

C++中有string类,可直接用string定义对象,类中定义了相关的串操作。

void strcpy(char* pstr1,char* pstr2)
{
	while(*pstr1++=*pstr2++);
}

int strlen(char* p)
{
	char* s=p;
	while(*s!='\0')++s;

	return s-p;
}

int strcmp(char* pstr1,char* pstr2)
{
	for(;*pstr1==*pstr2;++pstr1,++pstr2)
		if(*pstr1=='\0')return 0;
	return *pstr1-*pstr2;
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

#include<stdio.h>

int main(void)
 
{
 
	char string[10];
	char a[]="abcd";
	char* str1="abcdefghi";
	char* str2="abcdeeghi";
	int length=strlen(str1);
 
	strcpy(string,str1);
	int cmpstr=strcmp(str1,str2);
 
	printf("%s\n",string);
	printf("%d\n",*(str1+9));
	printf("%d\n",length);
	printf("%d\n",cmpstr);
	return 0;
 
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Visual C++/Turbo C口通信编程实践及源代码 第1章 轻松体验口通信编程与调试 1 1.1 使用口调试助手来体验口通信 1 1.2 体验windows环境下的visual c++口通信编程 4 1.3 体验dos环境下turbo c口通信编程 12 第2章 多线程口编程工具cserialport类 16 2.1 cserialport类的功能及成员函数介绍 16 2.2 应用cserialport类编制基于对话框的应用程序 30 2.3 应用cserialport类编制基于单文档的应用程序 35 2.4 对cserialport类的改进 40 2.4.1 改进一:ascii文本和二进制数据发送方式兼容 40 2.4.2 改进二:也许能解决内存泄漏 43 2.4.3 改进三:彻底关闭口,释放口资源 44 第3章 控件mscomm口编程 46 3.1 mscomm控件介绍 46 3.1.1 vc中应用mscomm控件编程步骤 46 3.1.2 mscomm控件行通信处理方式 47 3.1.3 mscomm 控件的属性说明 48 3.1.4 mscomm控件错误信息 55 3.2 使用mscomm控件的几个疑难问题 56 3.2.1 使用variant 和safearray 数据类型从口读写数据 56 .3.2.2 mscomm控件能离开对话框独立存在吗 59 3.2.3 如何发送接收ascii值为0和大于128的字符 60 3.2.4 在同一程序中用mscomm控件控制多个口的具体操作方法 62 3.2.5 解决使用控件编程时程序占用的内存会不断增大的问题 62 3.2.6 在mscomm控件口编程时遇到的其他问题 63 3.3 在基于单文档(sdi)程序中应用mscomm控件 63 3.4 应用mscomm控件控制多个口实例 69 3.5 口与modem拨号应用简例 76 3.5.1 创建工程 76 3.5.2 代码分析 78 3.5.3 应用 85 第4章 windows api口编程 87 4.1 windows api口编程概述 87 4.2 api口编程中用到的结构及相关概念说明 89 4.2.1 dcb(device control block)结构 89 4.2.2 超时设置commtimeouts结构 92 4.2.3 overlapped异步i/o重叠结构 94 4.2.4 通信错误与通信设备状态 95 4.2.5 行通信事件 96 4.3 windows api行通信函数 97 4.4 win32 api口通信编程的一般流程和特殊实例 116 4.4.1 win32 api口通信编程的一般流程 116 4.4.2 用查询方式读口 116 4.4.3 同步i/o读写数据 117 4.4.4 关于流控制的设置问题 118 4.5 cserialport类中的api函数编程应用剖析 119 4.6 win32 api口编程tty(虚拟终端)实例 128 4.6.1 建立程序工程 128 4.6.2 建立口设置对话框 129 4.6.3 编写ctermdoc类的相关代码 132 4.6.4 小结 141 4.6.5 在ctermview类中字添加符键入处理代码与口接收处理代码 142 第5章 口调试助手v2.2编程 147 5.1 建立scomm程序工程实现界面功能 147 5.2 口的初始化及关闭 150 5.3 口数据的发送与接收及十六进制数据的处理 151 5.3.1 十六进数据发送处理 152 5.3.2 手动发送处理 152 5.3.3 自动发送处理 153 5.3.4 接收处理及十六进制显示 154 5.4 其他辅助功能的实现 156 5.4.1 接收数据的文件保存 156 5.4.2 实现小文件发送 158 5.4.3 图钉按钮功能使程序能浮在最上层 161 5.4.4 对话框动画图标的实现 162 5.4.5 超链接功能的实现 164 5.4.6 如何打开帮助网页文件 164 第6章 dos环境下的turbo c口编程及通用实例gserial类 168 6.1 pc机异步通信适配器8250及其编程操作 169 6.1.1 ins8250内部寄存器及其选择方式 169 6.1.2 波特率设置 169 6.1.3 数据位、奇偶校验、停止位等数据格式设置 170 6.1.4 查询i/o方式相关设置 171 6.1.5 中断i/o通信方式相关设置 171 6.1.6 modem寄存器 172 6.2 comrxtx程序实例 173 6.3 通用实例程序gserial类 175 6.4 用gserial类控制多口 186 6.5 多口编程pc机高号中断8259a可编程中断控制器的控制 195 第7章 口通信用户层协议的编制与数据处理方法 197 7.1 通信协议的编制 197 7.1.1 为什么要编制用户通信协议 197 7.1.2 口通信中用户层协议编制原则 199 7.1.3 在口通信中几种常用的用户层协议 200 7.2 口通信数据包处理方法编程实例 202 7.2.1 编程任务 203 7.2.2 编程步骤 203 7.2.3 程序测试 216 第8章 单片机口通信 218 8.1 单片机口硬件系统及c51程序开发 218 8.1.1 较典型的单片机硬件系统实例 218 8.1.2 c51语言及程序简介 220 8.1.3 开发c51程序的利器keil c51 uvision2及串口程序仿真 221 8.2 c51单片机口通信程序实例 226 8.2.1 实例一 226 8.2.2 实例二 227 第9章 口与网络结合的解决方案及编程 230 9.1 口与网络结合的硬件解决方案 230 9.2典型口与联网的设备 231 9.2.1 nport5400系列产品的特点 231 9.2.2 nport 5400系列产品的典型应用介绍 233 9.2.3 nport5400系列产品的设置与编程测试 235 9.3 与access数据库结合的口通信实例 237 9.3.1 微机网络检测系统说明 237 9.3.2 创建odbc数据源 238 9.3.3 创建工程 239 9.3.4 程序简介 244 9.4 与winsock结合的口通信实例 246 9.4.1 客户端应用程序 247 9.4.2 服务器应用程序 252 9.5 在已经编好的口通信程序中加入网络通信功能 260 9.5.1参照mfc appwizard创建winsockets程序 261 9.5.2 利用windows sockets api和第三方提供的类进行编程 262 9.6 口通信用于遥控操作简例 262 第10章 计算机口与其他设备通信编程实例 266 10.1通过口收发短消息 266 10.1.1 sms编码规范及编码与解码例程 266 10.1.2 at命令收发短消息实例 273 10.1.3 "实时"接收短消息的方法 281 10.1.4 用口收发sms短信编程的一些讨论 283 10.2 计算机与rabbit 2000嵌入式系统通信编程实例 286 10.2.1 rabbit 2000微处理器介绍 286 10.2.2 动态c(dynamic c)语言介绍 287 10.2.3 某车载无线调度系统实例介绍 288 10.3 计算机与plc通信程序实例 294 10.4 matlab环境口编程通信实例 295 10.4.1 matlab口类serial应用 295 10.4.2 通过口使matlab simulink与下位机通讯进行控制 299 10.4.3 xpc目标环境下口通信实现 299 第11章 口通信基本概念及标准 302 11.1 口通信基本概念 302 11.1.1 行通信概述 302 11.1.2 单工、半双工和全双工的定义 305 11.1.3 同步传送与异步传送 306 11.1.4 行通信协议 306 11.2 rs-232-c口标准 309 11.2.1 rs-232-c标准 309 11.2.2 rs-232-c行通信接线实例 312 11.3 rs-422/485口标准 314 11.3.1 概述 314 11.3.2 rs-422与rs-485行接口标准 315 11.3.3 rs-422与rs-485的网络安装注意要点 317 11.3.4 rs-232、rs422、rs485电气参数对比 318 11.4 口调试注意事项 318 11.5 常用数据校验法 318 11.5.1 奇偶校验 318 11.5.2 循环冗余码校验 319 11.6 口连接和tcp/ip连接对比 320 11.7 现场总线与rs-232、rs-485的本质区别 320 11.8 modem通信技术 320 11.8.1 modem的基本工作原理 320 11.8.2 modem的功能 322 11.8.3 modem的分类 322 11.8.4 modem的安装 324 11.8.5 modem v.92标准介绍 326 11.8.6 modem的速度 327 11.8.7 modem优化方法 328 11.8.8 modem命令/at命令 329 第12章 不占用口的口数据捕捉 338 12.1 驱动程序的基本概念:vxd与wdm 338 12.1.1 虚拟设备驱动程序vxd 338 12.1.2 win32驱动程序模型wdm 340 12.1.3 在不同操作系统下选用哪种驱动程序模式 341 12.2 vxd示例程序介绍--vtoolsd中的commhook 341 12.3 口数据捕捉实例程序 351 12.3.1 编程任务 351 12.3.2 编程步骤 351 12.4 虚拟口简介 364 附录a turbo c说明 366 附录b ascii码表 376
基于定长顺序存储结构实现的赋值、比较、求子的位置、替换等操作。要求所有操作均以函数的形式实现,在主函数中调用各个函数实现整体功能。 注意:每一个字符的第一个元素存放的是该字符的长度(不包括第一个元素),除的赋值外,其他所有操作(比较、求子的位置、替换)等都不应包含该字符。 1.1.实验1:赋值函数实现: 按照系统已经定义的函数接口编写函数实体,实现:将输入数组StrInput[]的数据赋值给待赋值数组StrTobeAssigned[],其中待赋值数组StrTobeAssigned[0]存放有效数据的长度,StrTobeAssigned[1]之后存放带赋值数据。 具体要求和相关假设为: ① 函数接口定义为:int MyStrAssign(char * StrTobeAssigned, char * StrInput); ② 输入参数:待赋值字符变量StrTobeAssigned,字符的期望值StrInput; ③ 输出参数:无; ④ 处理规则及返回值:将StrTobeAssigned[1]及之后的内容赋值为StrInput的有效内容,StrTobeAssigned[0]赋值为StrInput有效字符的长度,并返回1; ⑤ 假设: a)两个字符均不为空; b)StrInput存放的是一个完成的字符(不包含长度); c)赞不考虑输入数据超过数组总长度的情况。 1.2实验2:替换函数: 按照系统已经定义的函数接口编写函数实体,实现:在主中MainStr查找是否存在某特定子SubStr1,若存在则将所有的SubStr1替换为新的指定子SubStr2,函数返回字符替换的次数。 具体要求和相关假设为: ① 函数接口定义为:int MyStrReplace(char * MainStr, char * SubStr1, char * SubStr2); ② 输入参数:主变量MainStr,子变量SubStr1,SubStr2; ③ 输出参数:无; ④ 处理规则及返回值:若主中存在子,用SubStr2替换主MainStr中出现的所有与SubStr1相同的不重叠的子,并返回字符替换的次数;否则返回0。 ⑤ 假设: a)主和两个子均不为空; b)MainStr[0]和SubStr1[0],SubStr2[0]分别存放对应字符的长度,不用替换该部分。 2.问题分析 (1)根据实验一的内容可知,我们需要通过编写函数实体的形式实现的赋值操作,主要的思路包括: (a)获得输入字符的长度len; (b)将输入字符的长度len赋值给待赋值字符的第一个元素StrTobeAssigned[0]; (c)依次将输入字符的数据赋值给待赋值字符。 (2)根据实验二的内容可知,我们需要通过编写函数实体的形式实现的替换操作,主要的思路包括: (a)遍历主MainStr,检查是否存在某特定子SubStr1; (b)如果存在则找到子在主中的位置; (c)在主中删除该子并更新主长度; (d)在主中插入该子并更新主长度; (e)过程中记录替换字符的次数,遍历结束后返回该次数(如果没有替换则为0); 如果有必要,可以使用本实验已经提供的相关函数,如:求子位置的函数MySubStrIndex(),子删除函数MyStrDelete()和子插入函数MyStrInsert()等

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值