C语言、C++字符串处理函数集合(更新)_第1页
C语言、C++字符串处理函数集合(更新)_第2页
C语言、C++字符串处理函数集合(更新)_第3页
C语言、C++字符串处理函数集合(更新)_第4页
C语言、C++字符串处理函数集合(更新)_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include#defineANum1285#defineANum23500/printf(”%d%cn,(int)a,(char)123);字符查看ASCII表/printf(”%d%dn,(int)我0,(int)我1);/汉字查看ASCII表/构造函数部分/Small_Num求较小函数求两个整型数据中较小的一个,返回值为较小的数intSmall_Num(intNum1,intNum2)if(Num1Num2)returnNum2;elsereturnNum1;/Bige_Num求较大函数求两个整型数据中较大的一个,返回值为较大的数intBige_Num(intNum1,intNum2)

2、if(Num1Num2)returnNum1;elsereturnNum2;/Str_Len求字符串求长函数求任意长度字符串或指针指向的字符串的字符串长度,返回值为字符数加1(即字符串长度)intStr_Len(charStr2)inti=0;while(Str2i!=0)/求长原理字符串最后以0结尾,统计不为0,直到为0时即可i+;returni+1;/Arr_Len求字符串数组元素个数的函数,返回值为字符串数intArr_Len(charStr2ANum1)/求元素个数要求数组中不能含有空串,该函数只统计到出现空串为止,另外数组的外层参数ANum1必须给出且与数组相同inti=0;whil

3、e(Str2i0!=0)inti=0;while(Str2i0!=0)0,统计不为0,直到为0时即可i+;returni-1;/求长原理字符串第一位不为/char-int转换,s为待转换成数字的数字字符串,一个参数时将s转换成十进制数,Str_Len为数字位数intChar_Int(chars)intTotal=0;for(inti=0;iint转换,s为待转换成数字的数字字符串,两个参数时将s转换成Num进制数并以十进制输出,Str_Len为数字位数intChar_Int(chars,intNum)intTotal=0;for(inti=0;ichar转换,chars为有足够长度的字符串,用

4、于存储数字生成的字符串char*Int_Char(intn,chars)intTmp_n=n,Length=0;while(Tmp_n=1)长度LengthLength+;Tmp_n/=10;环for(inti=0;iLength;i+)Tmp_n=n%10;次取余数,存入Tmp_n中n/=10;以便下一次取余数sLength-1-i=Tmp_n+48;数字字符所对应的数字(即Tmp_n+48),sLength=0;returns;/求出待转换成字符的数字的/依次除10直到小于1退出循/对待转换的数字各位依/求出待转换成字符的数字的/依次除10直到小于1退出循/对待转换的数字各位依/对待转换的

5、数字依次去尾数,/将各位数字依次转换成对应相应位置(即sLength-1-i/位数字字符串设尾/返回生成的数字字符串char*Str_Cpy(charStrl,constcharStr2)inti=0;while(Str2i!=0)Strli=Str2i;i+;Strli=0;returnStrl;/Str_Cpy字符串拷贝函数,从源字符串Strl中拷贝前Num个字符串Str2中,返回值Str2所对应的字符串char*Str_Cpy(constcharStrl,intNum,charStr2)inti=0;while(Str1i!=0&iNum)Str2i=Str1i;i+;Str2i=0;r

6、eturnStr2;/Str_Cpy字符串拷贝函数,从Str1第Num1个字符的位置开始,拷贝Num2个字符到Str2中,返回值Str2所对应的字符串char*Str_Cpy(constcharStr1,intNum1,intNum2,charStr2)inti=0;while(Str1i!=0&iNum2)Str2i=Str1i+Num1-1;i+;Str2i=0;returnStr2;使得Str的长度变为Len的整数倍不足部分添加空格char*Str_Chg(charStr,intLen)inti,LenS=Str_Len(Str);if(LenS%Len)!=0)/对字符串进行处理使得S

7、tr的长度为Len的整数倍for(i=LenS-1;iNum;i-)Str1(i-1)+(Str_Len(Str2)-1)=Str1i-1;将字符串1的第i-1个字符向后移动字符串Str2个字符数for(i=0;iNum;i-)/须包含Str_Len求字符串长函数Str1(i-1)+(Str_Len(Str2)-1)=Str1i-1;将字符串1的第i-1个字符向后移动字符串Str2个字符数for(i=0;iStr_Len(Str2)-1;i+)Str1Num+i=Str2i;returnStr1;/Str_Cmp_Min字符串比较函数(按字母表的顺序)比较两个字符串的大小,输出较小的字符串对应

8、的数字返回值1表示字符串Strl较小;返回值2字符串Strl较小;返回0时两个字符串相同intStr_Cmp_Min(charStr1,charStr2)/需包含构造函数Small_Num、Str_LenintCM_i=Small_Num(Str_Len(Str1),Str_Len(Str2);/取较短的字符串长度进行比较,(即比较至字符长度的后一位for(inti=0;iStr2i)return2;i=CM_i-1;if(Str1iStr2i)return1;i=CM_i-1;return0;需为最外层返回才有效/CM_i:CirculateMaxNumberi/如果字符串的第一个字符相/则

9、跳过上一个字符/比较字符串的第二个字符/有返回的值函数return0必intstr_inc(charstr1,charstr2)inti=0;/CM_i:CirculateMaxNumberi/如果字符串的第一个字符相/则跳过上一个字符/比较字符串的第二个字符/有返回的值函数return0必intstr_inc(charstr1,charstr2)inti=0;while(str2i!=0)if(str2i!=str1i)return0;if(str2+i=0)return1;return0;/当str2未至结尾时/当两字符串对应字符不相同时,返回0/当str2至结尾时,返回1Str_Inc两

10、个参数的stringinclude函数用于判断字符串Strl中是否含有字符串Str2,包含几个返回值就为几,返回CountS2的值intStr_Inc(charStr1,charStr2)/需包含构造函数Str_LenintCountL,CountS2=0;/CountL用于统计字符串长度是否达到Str2的长度,CountS2用于计数与Str2相同的字符串个数for(inti=0;iStr_Len(Str1)-1;i+)intk=i;if(Str1i=Str20)/当第一个字符串相同时开始进一步比较剩下几位是否相同CountL=1;for(intj=1;jStr_Len(Str2)-1;j+)

11、if(Str1+k=Str2j)CountL+;/对/对CountL进行清零操作/当剩下几位也相同时即含有/统计个数CountL=0;避免CountS2统计出错if(CountL=Str_Len(Str2)-1)与Str2相同的部分CountS2+;returnCountS2;/Str_Inc_NoDif不区分大小写的字符比较函数两个参数的stringinclude函数用于判断字符串Strl中是否含有字符串Str2,包含几个返回值就为几,返回CountS2的值intStr_Inc_NoDif(charStr1,charStr2)/需包含构造函数Str_LencharTmplANuml,Tmp2

12、ANuml;Str_Cpy(Tmpl,Strl);Str_Cpy(Tmp2,Str2);intCountL,CountS2=0;/CountL用于统计字符串长度是否达到Str2的长度,CountS2用于计数与Str2相同的字符串个数for(inti=0;iStr_Len(Tmpl)-l;i+)intk=i,j;if(Tmpli97)Tmpli+=32;/不区分大小写时,将大写全部转换成小写,进行比较if(Tmp2097)Tmp20+=32;if(Tmpli=Tmp20)/当第一个字符串相同时开始进一步比较剩下几位是否相同CountL=1;for(j=1;jStr_Len(Tmp2)-1;j+)

13、if(Tmp1+k=Tmp2j)if(Tmp1k97)Tmp1k+=32;if(Tmp2j97)Tmp2j+=32;CountL+;/对/对CountL进行清零操作/当剩下几位也相同时即含有/统计个数CountL=0;避免CountS2统计出错if(CountL=Str_Len(Tmp2)-1)与Str2相同的部分CountS2+;returnCountS2;/Str_Inc三个参数的stringIclude函数用于将字符串Str1中第Num个Str2是字符的起始位置i作为返回值返回,当Strl中不含有Str2时,i的返回值为Strl的字符串长度intStr_Inc(charStr1,intN

14、um,charStr2)/需包含构造函数Str_Leninti,CountL,CountS2=0;/CountL用于统计字符串长度是否达到Str2的长度,CountS2用于计数与Str2相同的字符串个数for(i=0;iStr_Len(Strl)-l;i+)if(Strli=Str20)/当第一个字符串相同时开始进一步比较剩下几位是否相同intk=i;CountL=l;for(intj=l;jStr_Len(Str2)-l;j+)if(Strl+k=Str2j)CountL+;/对/对CountL进行清零操作/当剩下几位也相同时即含有/统计个数CountL=0;避免CountS2统计出错if(

15、CountL=Str_Len(Str2)-l)与Str2相同的部分CountS2+;if(CountS2=Num)returni;/返回第Num个Str2处起始处ireturni;的值returnStr_Len(Str1);/Str_Son,求字符串数组最小子字符串函数,数组的最内层下标可以省略strlANuml,其余参数必须补齐且与待处理数组相同将字符串数组strl中的子串存入数组str2中对应的位置voidStr_Son(charstr1ANum1,charstr2ANum1)需包含构造函数Arr_Len、Str_Len、三个参数Str_Cpy、三个参数的Str_Incinttotal=A

16、rr_Len(str1);/依次选取str1/依次选取str1中的各个字符串,i依次选取str1i的每一个子字符串将子字符串拷贝到str2i中将子字符串str2i与str1中每一个for(intj=0;jStr_Len(str1i)-1;j+)字符串,j循环intinclude=0;Str_Cpy(str1i,j+1,str2i);for(inti2=0;i2total;i2+)字符串str1i2比较if(i2!=i&Str_Inc(str1i2,1,str2i)=0)/当str2i2与str2i不是同一个字符串,且str1i2开始的位置就含有子字符串str2i时,计数变量include自加i

17、nclude+;if(include=0)j=Str_Len(str1i-1);/没有与子字符串相同时退出循环/将字符串str2从str1的第一位开始清除char*str_del(charstr1,charstr2)判断str2是否为判断str2是否为str1的子串,若不是直/当str2未至结尾时/当str2未至结尾str1还未至结if(str_inc(str1,str2)=0)returnstr1;接返回str1不删除inti=0,j=0;while(str2i!=0)i+;while(str1i-1!=0)尾时str1j=str1i;/将str1的后str2位从开始位置str1j=str1

18、i;开始复制j+;i+;/为/为str2加上结尾str1j=0;returnstr1;Str_DelStringdelit函数用于将字符串Strl中的第Num个Str2字符串删除char*Str_Del(charStr1,intNum,charStr2)/需包含构造函数Str_Len、Str_Inc、当Str1中没有Str时最大循环数CM_j0,j初值为0且j+,jCM_j不成立,返回Strl的值inti=Str_Inc(Str1,Num,Str2);/通过三个参数的stringIclude获取第Num个Str2在字符串strl字符串的起始位置iintCM_j=Str_Len(Str1)-(S

19、tr_Len(Str2)-1)-i;/求循环操作长度for(intj=0;jCM_j;j+)Str1i+=Str1i+(Str_Len(Str2)-1);将Strl中第Num个Str2后的字符串移至起始位置i覆盖原有数据returnStr1;/输出Str1注意!在引用函数Str_Del时,Str1必须有属于自己的内存空间,如:Str_Del(apple,1,pp)时,系统就Str_DelStringdelit函数用于删除字符串Str1中的所有Str2char*Str_Del(charStr1,charStr2)/需包含构造函数Str_Len、两参数的Str_Inc、三参数的Str_Delint

20、count=Str_Inc(Str1,Str2);统计开始时Str2含有多少个Str1while(count-!=0)Str_Del(Str1,1,Str2);returnStr1;Str_Rep四个参数的StringRplace函数用一个字符串Str3去取代字符串Str1中的第Num个字符串Str2char*Str_Rep(charStr1,charStr2,intNum,charStr3)/需包含构造函数Str_Inc、Str_Del、Str_Add/取代时Str1须有自己的内存空间才能写入,还需有足够容纳取代后总字符的生数组越界可能会导致部分信息丢失/空间否则会发inti=Str_Inc

21、(Str1,Num,Str2);Str2在Str1的起始位置Str_Del(Str1,Num,Str2);个Str2Str_Add(Str1,i,Str3);Str1的i处returnStr1;/用i记住第Num个/删除Str1中第Num/用i记住第Num个/删除Str1中第Num将字符串Str3添加到char*Str_Rep(charStrl,charStr2,charStr3)/需包含构造函数Str_Inc、Str_Del、Str_Add、四个参数的Str_Repintcount=Str_Inc(Str1,Str2);统计开始时Str2含有多少个Strlwhile(count-!=0)St

22、r_Rep(Str1,Str2,1,Str3);returnStr1;/引用qsort排序intCmp(constvoid*ele1,constvoid*ele2)return(strcmp(char*)ele1,(char*)ele2);/引用strcmp字符串比较函数,在头文件string.h中voidmain()charArr49=bnanan,apple,orange,humburge;qsort(Arr,4,9,Cmp);/引用qsort排序函数,在头文件stdlib.h中for(inti=0;i4;i+)printf(%s,Arri);/Arr_Sort字符数组排序函数,对数组内的

23、字符串进行排序若想实现,去重后输出,可使用选择输出,/即排序后的后一个与前一个不同时输出if(Str_Cmp_Min(ATmpi,ATmpi-1)!=0)printf(%s,ATmpi);/需包含构造函数Arr_Len/需包含构造函数Arr_Len、/Tmp为排序交换提供字当后一个字符串ATmpj小于voidArr_Sort(charATmpANum1)Str_Cmp_Min、两参数的Str_CpyintCM_i=Arr_Len(ATmp);for(inti=0;iCM_i-1;i+)charTmpANum1;符串缓存空间for(intj=i+1;jCM_i;j+)if(Str_Cmp_Min

24、(ATmpi,ATmpj)=2)前一个字符串ATmpi时,将两字符串进行交换Str_Cpy(Tmp,ATmpi);Str_Cpy(ATmpi,ATmpj);Str_Cpy(ATmpj,Tmp);/Str_Sort对字符串内字符排序函数,对Strl按从小到大进行排序后输出char*Str_Sort(charStr1)/需包含Str_Len函数charTmp;for(inti=0;iStr_Len(Strl)-2;i+)for(intj=i+l;jStrlj)Tmp=Strli;Strli=Strlj;Strlj=Tmp;returnStrl;/Str_Sort对字符串内字符排序函数,对Strl排

25、序后存储到Str2中,Strl保持不变,返回值Str2char*Str_Sort(charStr1,charStr2)需包含Str_Cpy、Str_Len两个构造函数Str_Cpy(Str2,Str1);charTmp;for(inti=0;iStr_Len(Str2)-2;i+)for(intj=i+1;jStr2j)Tmp=Str2i;Str2i=Str2j;Str2j=Tmp;returnStr2;/Str_Sort对字符串内字符排序函数,对Strl中字符按Num里给的字符顺序进行排序,Len为Num数组的元素个数,最后不足Len长度的原样拷贝,最后两位原样拷贝char*Str_Sort

26、(charStr,intNum,intLen)/需包含Str_Len、Str_Cpy两个构造函数intj,i,CMi=Str_Len(Str)-2;因为在使用gets获取一整行字符串时最后一位是字符结尾0,倒数第二位是换行符也要排除在字符长度之外不能参与字符排序交换charTmpANuml;/ANuml需给定for(i=0;i(CMi/Len)*Len;i+)/选取Str的Len的整数倍进行交换if(i%Len=0)j=0;Tmpi=Str(i/Len)*Len+(Numj+-l);for(i;iCMi+l;i+)/选取Str的Len的余数部分原样拷贝,多加一位将倒数第二位的换行符也拷贝上if

27、(i%Len=0)j=0;Tmpi=Stri;Tmpi=0;/为字符串添加结尾Str_Cpy(Str,Tmp);returnStr;/Get_Num字符串自动生成列序函数,根据输入的字符串大小数序依次取出对应的列号存放到Num数组中,如:Get_Num(95423,Num),可得列序Num=4,5,3,2,1int*Get_Num(charStr,intNum)/需包含Str_Len、Str_Sort两个构造函数文本加密时使用,使用此列序加密文本intcountk,countj;对Tmp里的字符按从小到大排序对Tmp里的字符按从小到大排序/Tmp中某一个字符与Str中的某个字符/countj用

28、于计数Str中第几个字符Str_Sort(Str,Tmp);for(inti=0;iStr_Len(Str)-1;i+)countj=0;for(intj=0;jStr_Len(Str)-1;j+)if(Tmpi=Strj)相同时countj+;与Tmpi相同,故每次i循环计数前时清为0Numi=j+1;intk=i;countk=1;while(Tmpk-=Tmpk-1)countk+;/countk用于计数Tmp中多少个相同的字符,故每次计数前清为1if(countj=countk)j=Str_Len(Str)-1;当Tmp中第几个相同的字符与Str中第几个相同的字符对应时退出循环retu

29、rnNum;/Get_Num数组自动生成列序函数,根据输入数组中数据的大小数序依次取出对应的列号存放到Num数组中,如:Get_Num(1,5,4,2,3,Num),可得列序Num=1,4,5,3,2/数组Num1中元素需从1开始连续且不相同,Len1为数组Num1中元素个数int*Get_Num(intNum1,intNum2,intLen1)/用于对给定的列序数组再次求列序,文本解密时使用,使用此列序还原文本for(inti=0;iLen1;i+)for(intj=0;jLen1;j+)if(Num1j=i+1)Num2i=j+1;returnNum2;/Line_Lock字符串列序锁函数

30、,对str中的字符按key中字符密码换序加密/key中存放任意字符密码,对符合列排序大小关系的密码均可解密char*Line_Lock(charstr,charkey)/需包含函数两参数的Get_Nu、三参数的Str_SortintkeyTmpANum1;Get_Num(key,keyTmp);Str_Sort(str,keyTmp,Str_Len(key)-1);returnstr;/Line_Key字符串列序匙函数,对str中的字符按key中字符密码换序解密/key中存放任意字符密码,对符合列排序大小关系的密码均可解密char*Line_Key(charstr,charkey)需包含函数两

31、参数的Get_Num、三参数的Get_Num、三参数的Str_SortintkeyTmp1ANum1,keyTmp2ANum1;Get_Num(key,keyTmp1);Get_Num(keyTmp1,keyTmp2,Str_Len(key)-1);Str_Sort(str,keyTmp2,Str_Len(key)-1);returnstr;/需包含函数两参数的Str_LenAph_Lock字符串字母锁函数,对str中的字符按key中字符密码换序加密/需包含函数两参数的Str_Lenchar*Aph_Lock(charstr,charkey)for(inti=0;i=A&stri=a&stri

32、z)stri=t-26;则-26,使其依然属于azelsestri=t;if(stri=0)stri=9;if(stri0)stri+=y;returnstr;字符O对应整数48,若加字符后大于zAph_key字符串字母锁函数,对str中的字符按key中字符密码换序加密/key中存放任意字符密码char*Aph_Key(charstr,charkey)for(inti=O;i=A&stri=Z)是大写字母t=stri-(keyk+-47);if(t=a&stri=z)大写字母t=stri-(keyk+-47);if(ta)stri=t+26;则+26,使其依然属于azelsestri=t;if

33、(striyear2)y1=year2;m1=mouth2;d1=day2;y2=year1;m2=mouth1;d2=day1;sign=-1;elsey1=year1;m1=mouth1;d1=day1;y2=year2;m2=mouth2;d2=day2;/信息输入要求提示if(ml12)printf(n年没有d月n,ml);if(dldsm1-1)printf(n%d月没有d天n,ml,dl);if(m2l2)printf(n一年没有d月n,m2);if(d2dsm2-l)printf(n%d月没有d天n,m2,d2);/scanf(%d%d%d%d%d%d,&yl,&ml,&dl,&

34、y2,&m2,&d2);if(yl%400=0)|(yl%4=0&yl%l00!=0)dsl=29;/判断第一年是否是闰年/判断是否为同一年/判断是否为同一年/若是则统计ml到m2-l/去除ml多加的,加上m2未加的/判断不是同一年,即yl小于y2时sum+=dsj-l;/先计算yl到年if(yl=y2)for(intj=ml;jm2;j+)sum+=dsj-l;sum=sum-dl+d2;elsefor(intj=ml;j=l2;j+)底的天数sum-=dl;yl+;if(y1!=y2)/判断此时的y1是否到了y2的那一年if(y1%400=0|(y1%4=0&y1%100!=0)sum+=

35、366;/若不是判断是否为闰年/若是闰年,一年是366天elsesum+=365;/若不是闰年,一年是365天y1+;/直到y1为y2的那一年时结束循环/计算最后一年从年头开始到m2d-2的天数if(y1%400=0|(y1%4=0&y1%100!=0)ds1=29;elseds1=28;for(j=1;j=0)i=i%7;returnDatedayi;elsei=-i%7;returnDateday7-i;intgetnum(intN)获取给定数字N的位数,10位数以下inti=0;intS=1;while(Sfor(i=0;in;i+)Mi=N%10;N=N/10;将N转换成最大组合数/动

36、态分配一个长度为n的整形数组空间,须将整数N由个位向高位依次存入Mi中for(i=0;ivn-1;i+)对Mi中的数据按从大到小排序for(j=i+1;jn;j+)if(MiMj)t=Mi;Mi=Mj;Mj=t;t=0;for(i=0;in;i+)t=t*10+Mi;returnt;/求出最大排列的数/返回最大排列的数值intnumMin(intN)int*M,i,j,t,n=getnum(N);M=(int*)malloc(n*sizeof(int);for(i=0;in;i+)Mi=N%10;N=N/10;for(i=0;in-1;i+)for(j=i+1;jMj)t=Mi;Mi=Mj;M

37、j=t;/求出最小排列的数/求出最小排列的数/返回最小排列的数值for(i=0;in;i+)t=t*10+Mi;returnt;/*intciclNum(intN)/*intciclNum(intN)intt=N,Max;do/求是否存在循环数/最大排列数与最小排列数之差/最大排列数与最小排列数之差printf(%d-%d=%dn,Max,Max-t,t);if(t=N)return0;/若差值t与N再次相同时,退出循环while(numMax(t)!=Max);/当差值的最大排列数,与前一个最大数不相同时一直循环下去returnMax;*/intciclNum(intN)intciclNum

38、(intN)intt=N,Max,s=0;do/求是否存在循环数if(t=N)return0;if(s=100)returnMax;/若差值tif(t=N)return0;if(s=100)returnMax;/若差值t与N再次相同时,退出循环/设置一个循环断点,以免出现无限循环/最大排列数与最小排列数之差printf(%d-%d=%dn,Max,Max-t,t);/当差值的最大排列数,与前一个最大数不相Max=numMax(t);t=Max-numMin(t);s+;while(numMax(t)!=Max);同时一直循环下去returnMax;/此时可以求出由A中的元素组成str的方法有N

39、种,以N所代表的元素为返回值voidFunction(charA4,charstr,int&N)printf(nnprintf(nn此文本有%d条字符串,共%dKBnn,TotalStrO,TotalSizeO/1024+1);printf(nnprintf(nn此文本有%d条字符串,共%dKBnn,TotalStrO,TotalSizeO/1024+1);TotalStrO=i;TotalStrO=i;TotalStrO=i;TotalStrO=i;TotalStrO=i;TotalStrO=i;inti;charsTmp30=;for(i=0;i9;i+)inti;charsTmp30=;

40、for(i=0;i9;i+)strcpy(sTmp,str);if(str_inc(sTmp,Ai)=1)str_del(sTmp,Ai);if(sTmp0=0)N+;elseFunction(A,sTmp,N);return;/式中9为A中元素的个数当Ai为sTmp的子串时/将Ai从sTmp中删除当变成空串时,N计数加一/当不是空串时,递归调用/222.项目主体部分/222.1./文本换行起始位置/除main函数公共部分,以及几个构造函数Str_Len部分,可直接引用inti=0,lineNum=1,TotalSizeO=0,TotalStrO=0;charTmp500;printf(nnn

41、nnn请输入每行字符串个数,以便按要求输出Enter键确认。nnnnnnnnnnnnnnnnnnnntt);scanf(%d,&lineNum);while(fscanf(fpSrc,%s,Tmp)!=EOF)i+;printf(%s,Tmp);fprintf(fpDest,%s,Tmp);if(i%lineNum)=0)printf(n);fprintf(fpDest,n);TotalSizeO+=Str_Len(Tmp);/文本换行结尾位置/222.2./自定义连接符字符串合并起始位置/除main函数公共部分,以及几个构造函数Str_Len部分,可直接引用inti=0,lineNum=1,

42、TotalSizeO=0,TotalStrO=0;charTmp501,Scanf_Str501;printf(nnnnnn请输入需要连成一体的字符串个数Enter键确认。nnnnnnnnnnnnnnnnnnnntt);scanf(%d,&lineNum);printf(nn请输入500字节的自定义连接符nnEnter键确认。nnnnnnnnnnnnnnntt);scanf(%s,&Scanf_Str);while(fscanf(fpSrc,%s,Tmp)!=EOF)i+;printf(%s,Tmp);fprintf(fpDest,%s,Tmp);if(i%lineNum)=0)printf(

43、);fprintf(fpDest,);elseprintf(%s,Scanf_Str);fprintf(fpDest,%s,Scanf_Str);TotalSizeO+=Str_Len(Tmp);printf(nnprintf(nn此文本有%d条字符串,共%dKBnn,TotalStrO,TotalSizeO/1024+1);printf(nnprintf(nn此文本有%d条字符串,共%dKBnn,TotalStrO,TotalSizeO/1024+1);Str_Cpy(ATmpi,Tmp);/Str_Cpy(ATmpi,Tmp);/将缓存数据存入字符串Str_Cpy(ATmpi,Tmp);/

44、Str_Cpy(ATmpi,Tmp);/将缓存数据存入字符串TotalStrO=i;TotalStrO=i;/字符串合并结尾位置/222.3./文本排序去重主体起始位置/除main函数公共部分,以及几个构造函数Str_Cpy、Str_Len、Str_Cmp_Min部分,可直接引用inti=0,j,ChocNum1=1,ChocNum2=1,TotalStrO=0,TotalStrP=0,TotalSize=0,CM_i=0;charATmpANum2ANum1,TmpANum1;/定义字符串Tmp用于临时存储经fscanf函数从源文件中获取的字符串printf(nnnnnnnnnnnnnnnn

45、nnnnnnnnnn请选择:1.整行排序2.全文排序Enter键确认nnnt);scanf(%d,&ChocNum1);111.将文件内容存入临时数组ATmp,并统计字符串数TotalStrO,也是临时数组排序最大位置,顺便计算出总字节数TotalSizeif(ChocNum1!=2)/数据整行存入字符串缓存/数据整行存入字符串缓存/将缓存数据存入字符串/数据按字符串存入缓存while(fgets(Tmp,ANum1-1,fpSrc)Str_Cpy(ATmpi,Tmp);数组TotalSize+=Str_Len(ATmpi);i+;TotalStrO=i;elsewhile(fscanf(fp

46、Src,%s,Tmp)!=EOF)TotalStrO=i;TotalStrO=i;数组TotalSize+=Str_Len(ATmpi);i+;TotalStrO=i;/2.开始对数组内的字符串按从小到大排序相同的数据会被排列在一起CM_i=TotalStrO;for(i=0;iCM_i-1;i+)charTmpANum1;/Tmp为排序交换提供字符串缓存空间for(j=i+1;jCM_i;j+)if(Str_Cmp_Min(ATmpi,ATmpj)=2)/当后一个字符串ATmpj小于前一个字符串ATmpi时,将两字符串进行交换Str_Cpy(Tmp,ATmpi);Str_Cpy(ATmpi,

47、ATmpj);Str_Cpy(ATmpj,Tmp);/3.选择输出排序后文本时进行即去重printf(nnnnnnnnnnnnnnnnnnnnnnnnnn是否进行去重排序:1.是2.否Enter键确认nnnt);scanf(%d,&ChocNum2);if(ChocNum2=2)for(i=0;iCM_i;i+)fprintf(fpDest,%s,ATmpi);/将字符串写入源文件中printf(%s,ATmpi);/写入源文件同时屏幕输出TotalStrP+;if(ChocNum1!=2)fprintf(fpDest,n,ATmpi);/将换写入源文件中printf(n,ATmpi);/写入源文件同时屏幕输出if(ChocNum1!=1)fprintf(fpDest,n,ATmpi);/将换行符写入源文件中printf(n,ATmpi);/写入源文件同时屏幕输出TotalStrP+;elsefor(i=0;iCM_i;i+)if(Str_Cmp_M

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论