字符数组_串的实现
来源:互联网 发布:伪娘丁丁套淘宝 编辑:程序博客网 时间:2024/05/14 11:03
// 在这里预先定义,'/0'作为串结束的标志#include<iostream>#include<stdio.h>#include<string.h>char* str = new char[100];// 线性表传入参数需要引用,线性表指针被包装,所以修改值需要引用// 字符串操作可以直接传指针void StrAssign(char* S,char* T){ // strlen()位于<string.h>里,用于char*字符数组求长度; // str.length()位于<string>里,用于string字符串求长度; // 两个函数无法交叉使用 int length = strlen(T); int cnt=0; while(cnt < length) { S[cnt] = T[cnt]; ++cnt; } //对于普通串最好进行操作以后在串尾加'\0',这样保证后面操作程序运行的正确 S[cnt] = '\0'; return;}void StrCopy(char* T,char* S){ int cnt = 0; while(cnt < strlen(S)) { T[cnt] = S[cnt]; ++cnt; } T[cnt] = '\0'; return ;}// 返回字符串长度int StrLength(char *S){ return strlen(S);}// 是否为空串bool StrEmpty(char* S){ if(strlen(S) != 0) return false; return true;}// 返回字符串长度,c++自带求字符数组长度的函数//int StrLength(char *S){}// 连接两个字符串,并且不改变这两个串的值char* Concat(char* S1,char* S2){ char* s = new char[strlen(S1)+strlen(S2)+1]; int cnt = 0,cas=0; while(S1[cnt]) { s[cas++] = S1[cnt++]; } cnt = 0; while(S2[cnt]) { s[cas++] = S2[cnt++]; } s[cas] = '\0'; return s;}// 将串清空void ClearStr(char* S){ // 调用字符串求长度函数时'\0'也是作为串结束的标志 // 后面的操作可以对串进行覆盖 S[0] = '\0'; return ;}// 比较两个串的大小int Compare(char* S1,char* S2){ int cnt = 0; while(S1[cnt]&&S2[cnt]) { // 使用if-else-if减少判断次数 if(S1[cnt] > S2[cnt]) return 1; else if(S1[cnt] < S2[cnt]) return -1; ++cnt; } if(S1[cnt])return 1; else if(S2[cnt])return -1; return 0;}// 截取定位的子串char* SubString(char* S,int pos,int len){ char* sub = new char[len+1]; int length = strlen(S); if(pos > length) { // 直接return '\0'在程序外操作发生错误 // !先赋值在返回 sub[0] = '\0'; } else { int cnt = 0,cas = pos; // 设定从pos截取len超过串长度,将前面有效部分截取 while((cas < (pos+len)) && S[pos]) { sub[cnt++] = S[cas++]; } sub[cnt] = '\0'; } return sub;}// 返回第一次出现相同子串的定位pos值int Index(char* S1,char* S2,int pos){ // cas定位S2串中坐标,len表示配对的子串长度 int cas = 0,len = 0; int len1=strlen(S1),len2=strlen(S2); while(pos < len1) { while(cas < len2) { // 当存在相同字符进入循环,长度在循环中增加 while(S1[pos+len] == S2[cas+len]) { ++len; } // 长度不为0跳出循环 if(len != 0) break; // 未进入循环,S2坐标右移 ++cas; } if(len !=0) break; // 当前pos下标未找到适配字符,S1右移; // cas置零 ++pos,cas=0; } if(len == 0)return 0; else return pos;}// 从定位pos起插入字符串// 注意后尾长度出现覆盖问题,pos后移会产生覆盖问题char* StrInsert(char* S,char *T,int pos){ int len_t = strlen(T); int len_s = strlen(S); char* str_s_t =new char[len_t+len_s+10]; int cnt = 0,cas = 0; while(cnt < pos ) { str_s_t[cas++] = S[cnt++]; } cnt = 0; while(cnt < len_t) { str_s_t[cas++] = T[cnt++]; } while(S[pos]) { str_s_t[cas++] = S[pos++]; } str_s_t[cas] = '\0'; return str_s_t;}// 从定位pos开始删除子串void StrDelete(char* S,int pos,int len){ int len_s = strlen(S); if((pos+len) > len_s) { S[pos]= '\0'; } else { int cnt = pos,cas = pos + len; while(S[cas]) { S[pos++] = S[cas++]; } S[pos] = '\0'; }}// 销毁串,自带函数不需要定义void DestroyString(char* S){ delete[] S; }// new和delete作为关键字不是函数不需要加()int main(){ char* t = new char[100];// 长度在使用过程中可以变换,初值可以随意设置; StrAssign(str,"abcdefg"); int i=0;printf(" ");while(str[i])printf("%c",str[i++]);printf("\n"); StrCopy(t,str); i = 0;printf(" ");while(t[i]){printf("%c",t[i++]);}printf("\n"); char* str_t = Concat(str,"dcba"); i = 0;printf(" ");while(str_t[i]){printf("%c",str_t[i++]);}printf("\n"); if(Compare(str,t) == 0) { printf(" "); printf("输入两个字符串相等!\n"); } char* subStr = SubString(str,100,3); char* subStr1 = SubString(str,2,3); char* subStr2 = SubString(str,2,100); i=0;printf(" ");while(subStr[i]){printf("%c",subStr[i++]);}printf("\n"); i=0;printf(" ");while(subStr1[i]){printf("%c",subStr1[i++]);}printf("\n"); i=0;printf(" ");while(subStr2[i]){printf("%c",subStr2[i++]);}printf("\n"); printf(" ");printf("%d\n",Index("abcde","fghij",3)); printf(" ");printf("%d\n",Index("abcde","fgcdehij",0)); printf(" ");printf("%d\n",Index("abcde","fgcdehij",3)); char* str1 = new char[100]; StrAssign(str1,"abcglmnabcdefghijklmn"); char* str2 = new char[100]; StrAssign(str2,"def"); char* str3=StrInsert(str1,str2,3); i=0;printf(" ");while(str3[i]){printf("%c",str3[i++]);}printf("\n"); StrDelete(str3,5,20); i=0;printf(" ");while(str3[i]){printf("%c",str3[i++]);}printf("\n"); StrDelete(str3,1,1); i=0;printf(" ");while(str3[i]){printf("%c",str3[i++]);}printf("\n"); ClearStr(str_t); if(StrEmpty(str_t)) { printf(" "); printf("输入为空串!\n"); } delete[] str; delete[] str1; delete[] str2; delete[] str3; delete[] subStr; delete[] subStr1; delete[] subStr2; delete[] t; delete[] str_t; return 0;}
阅读全文
0 0
- 字符数组_串的实现
- 21_字符数组
- 1_数组的实现
- 指针_习题:将字符串\"computer\"赋给字符数组,并间隔的输出该串
- String与包装类_字节数组_字符数组间的转换
- 嘿牛程序员_成都传智博客_讨论字符串中字符出现的次数(续一:通过数组实现按次序输出)
- 嘿牛程序员_成都传智博客_讨论字符串中字符出现的次数(续一:通过数组实现按次序输出)
- 67_数组_实现两个数的互换.cpp
- qsort()实现对字符数组的排序
- 用递归实现字符数组的反转
- 数组_例题:输入一行任意字符,求出其中字母、数字及其他字符的个数
- 消除字符数组的字符
- 华为编程大赛_将字符数组内的数字排序
- C语言编程_一维数组、字符数组
- C_定义字符型二维数组实现简单的编辑器
- 7--7函数实现指针字符数组的排序
- 字符数组实现两个大整数的加法
- Android:Volley实现参数,字符数组,文件,图片的上传
- numpy的getA()/getA1()/getH()/getI()函数
- 下联网关国标对接中的通信过程分析和实例之客户端主动发起的实时音视频点播过程
- div盒子模型
- 设计模式——单例模式
- POJ
- 字符数组_串的实现
- 商机 | 大数据/政务云采购清单 招标9起,最高招标价为1444万(11.1-11.3)
- springMVC学习笔记(一)
- Matlab num2cell函数的用法
- 大数据早报:蚂蚁金服研发出眼纹识别技术 霍金谈AI:将成为完全取代人类的新生命体(11.4)
- 三步走——带你打造一份完美的数据科学求职简历
- ADO.NET sqlhelper通用类库
- UNITY SPRITES: SPRITERENDERER VS. CANVASRENDERER (UI IMAGE)
- 【模板】lca 最近公共祖先