字符串的简单处理
来源:互联网 发布:js手册中文版下载 编辑:程序博客网 时间:2024/04/26 22:46
其实我认为计算机存储的东西有两类,一类是数据,一类是字符串,我不想将字符与数据看做一个东西,对于字符需要处理的地方非常多,比如匹配,替换,删除,修改等等,下面我总结下自己今天写的有关字符串处理的几个函数:
StrAssign(chars); //构建一个串S
StrCopy(&S,chars); //将chars串拷贝给S
StrLength(S,&ret); //ret的值就是数组的长度
StrInsert(S,pos,T); //在串S的第pos个字符前插入串T
StrDelete(S,pos,len); //从串S中第pos个字符开始删除len个字符。犯了一个错:是不能将字符串当做数组来改变它的位置的元素值,可以获取值,但是不能将值改变,因为这是常量。
ret = StrCompare(S,T); //比较两个字符串的大小
StrCat(S,T); //将字符串T连接到串S上
SubString(&T,S,pos,len); //在S串中从pos号元素处截取len个元素并且将它赋值给T
ret = StrIndex(S,pos,T); //从主串S串的下标为pos开始,遇到T串完全匹配就返回第一个下标
StrReplace(S,T,R); //将主串S中所有的串T都用R串替换掉。
下面附上代码:
#include<stdio.h>#include<stdlib.h>char *StrAssign(char *);void StrCopy(char **,char *);void StrLength(char *,int *);char *StrInsert(char *,int,char *);char *StrDelete(char *,int,int);int StrCompare(char *,char *);void StrCat(char *,char *);void SubString(char **,char *,int,int);int StrIndex(char *,int,char *);void StrReplace(char *,char *,char *);void StrReplace(char *S,char *T,char *R) //将主串S中所有的串T都用R串替换掉{ int num,numt; StrLength(T,&numt); char *W; while((num = StrIndex(S,0,T)) != -1) { W = StrDelete(S,num,numt); S = StrInsert(W,num,R); } printf("%s\n",S);}int StrIndex(char *S,int pos,char *T)//从主串S串的下标为pos开始,遇到T串完全匹配就返回第一个下标,没有找到就返回0{ int i,j,s; int num1,num2; StrLength(S,&num1); StrLength(T,&num2); for(i = pos;i < num1;i++) { for(s = i,j = 0;j < num2;j++,s++) { if(S[s] != T[j]) { break; } } if(j == num2) { return s-num2; } } return -1;}void SubString(char **T,char *S,int pos,int len) //在S串中从pos号元素处截取len个元素并且将它赋值给T{ char data[len]; int i,j = 0; for(i = pos;i < pos+len;i++) { data[j++] = S[i]; } data[j] = '\0'; *T = data;}void StrCat(char *S,char *T) //将字符串T连接到串S上{ int i,num,j = 0; StrLength(S,&num); char ch; char R[100]; for(i = 0;i < num;i++) { R[i] = S[i]; } while((ch = T[j++]) != '\0') { R[i++] = ch; } R[i] = '\0'; printf("%s\n",R);}int StrCompare(char *S,char *T) //比较两个字符串的大小{ int i,num1,num2; StrLength(S,&num1); StrLength(T,&num2); if(num1 < num2) { for(i = 0;i < num1;i++) { if(S[i] != T[i]) { return S[i]-T[i]; } } return -1; } if(num1 > num2) { for(i = 0;i < num2;i++) { if(S[i] != T[i]) { return S[i]-T[i]; } } return 1; } if(num1 == num2) { for(i = 0;i < num2;i++) { if(S[i] != T[i]) { return S[i]-T[i]; } } return 0; }}char *StrDelete(char *S,int pos,int len)//从串S中第pos个字符开始删除len个字符。{ int i = 0,j = 0,num; StrLength(S,&num); char *R = (char *)malloc(100 * sizeof(char)); char ch; for(i = 0;i < pos;i++) { R[i] = S[i]; } j = pos+len; while((ch = S[j++]) != '\0') { R[i++] = ch; } R[i] = '\0'; return R;}char *StrInsert(char *S,int pos,char *T) //在串S的第pos个字符前插入串T{ char ch; int i = 0,j = 0,k = 0; char *R = (char *)malloc(100 * sizeof(char)); //此处是直接定义数组还是malloc呢,这还是有点讲究的,因为声明数组的话是在栈上, //当这个函数结束之后,栈的空间会被释放掉,也就是你如果将数组名return回去,那么如果那块内存空间目前没有人使用的话,你用返回 //的数组名还是正常的,但是如果这块内存空间万一被别人使用,那么这将导致段错误,要是这块内存使用malloc开辟的,那么它就存在于堆 //上,这样即使函数结束,也不影响。 for(j = 0;j < pos;j++) { R[i++] = S[j]; } while((ch = T[k++]) != '\0') { R[i++] = ch; } while((ch = S[j++]) != '\0') { R[i++] = ch; } R[i] = '\0'; return R;}void StrLength(char *S,int *ret)//ret的值就是数组的长度{ char ch; int i = 0; while((ch = S[i++]) != '\0'); *ret = i-1;}void StrCopy(char **S,char *chars) //将chars串拷贝给S{ *S = chars; }char *StrAssign(char *chars)//构建一个串S{ char *S; S = chars; return S;}int main(int argc,char *argv[]){ int ret; char *T = "bo"; char *S = "yangbodongbodongbodongbodong"; char *R = "XXX"; char *chars; S = StrAssign(chars); //构建一个串S StrCopy(&S,chars); //将chars串拷贝给S StrLength(S,&ret); //ret的值就是数组的长度 StrInsert(S,4,T); //在串S的第四个字符前插入串T StrDelete(S,4,2); //从串S中第四个字符开始删除两个字符。犯了一个错 //是不能将字符串当做数组来改变它的位置的元素值,可以获取值,但是不能将值改变,因为这是常量。 ret = StrCompare(S,T); //比较两个字符串的大小 StrCat(S,T); //将字符串T连接到串S上 SubString(&T,S,4,6); //在S串中从4号元素处截取6个元素并且将它赋值给T ret = StrIndex(S,2,T); //从主串S串的下标为2开始,遇到T串完全匹配就返回第一个下标 StrReplace(S,T,R); //将主串S中所有的串T都用R串替换掉。 return 0;}
0 0
- 简单字符串的处理
- 字符串的简单处理
- 字符串的简单处理
- 简单的字符串处理
- 简单的字符串处理
- 字符串的简单处理~~
- 字符串的简单处理 nyoj525
- hdoj1020简单的字符串处理
- C#简单的字符串处理
- 字符串String的 简单处理
- 字符串处理的一个简单题
- 字符串处理的几个简单函数
- Pixel density(简单的字符串处理)
- n a^o7 ! (简单的字符串处理)
- hdu 1020 简单的字符串处理
- HDU 2399 GPA(简单字符串的处理)
- wertyu(简单的字符串处理问题)
- Course(简单的字符串处理问题)
- Pdf文档在线编辑控件源码及演示
- Git Technical Notes
- mvp android 另一篇文章
- LPC2388驱动PHY-DP83848
- iOS之 view视图的创建和它的Frame、bounds、center属性
- 字符串的简单处理
- Git Cheetsheet
- javascript函数的使用
- 策略模式(Strategy)
- javascript面向对象特征
- valgrind 的使用简介
- ecmobile iOS 9.0下 xcode修正
- 一种解决方法tcsetattr fd1: input/output error
- 无线 WIFI 的13个信道频率范围