chuanfuzhi.rar

  • PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 2
    下载次数
  • 2009-11-22 12:29
    上传日期
实现串的基本功能,串初始化,串删除,串插入,求串长,取字串等
chuanfuzhi.rar
  • chuanfuzhi.cpp
    7.8KB
内容介绍
#include <iostream> #include <stdio.h> #include <malloc.h> using namespace std; struct sqstring { char data; sqstring *next; }; void strassign(sqstring*& T,char L[]); void show(sqstring* T); int length(sqstring* T); int compare(sqstring* S,sqstring* T); void strdelete(sqstring*& S,int pos,int len); void substring(sqstring*& sub,sqstring* T,int pos,int len); void concat(sqstring*& T,sqstring* S1,sqstring* S2); void replace(sqstring*& T,sqstring* S,sqstring* V); void choice(void); void strassign(sqstring*& T,char L[]) { int i=0; sqstring *q,*p; T=(sqstring *)malloc(sizeof(sqstring)); T->next=NULL; q=T; while(L[i]!='\0') { p=(sqstring *)malloc(sizeof(sqstring)); p->data=L[i]; q->next=p; q=p; i++; } q->next=NULL; } int compare(sqstring* S,sqstring* T) { int i,len1,len2,minlen; sqstring *q,*p; q=S->next; p=T->next; len1=length(S); len2=length(T); minlen=(len1<len2)?len1:len2; for(i=0;i<minlen;i++) { if(q->data==p->data) { q=q->next; p=p->next; } else if(q->data>p->data) return 1; else return -1; } if(len1==len2) return 0; else { if(len1>len2) return 1; else return -1; } } int length(sqstring* T) { int i=0; sqstring *q; if(T->next==NULL) return 0; else { q=T; while(q!=NULL) { i++; q=q->next; } return (i-1); } } void strdelete(sqstring*& S,int pos,int len) { sqstring *q,*p1,*p2; int i,j; q=S->next; if(pos<1||pos>length(S)||len>length(S)-pos+1) cout<<"要删除的子串不存在!"<<endl; else { for(i=1;i<pos;i++) { if(q==NULL) cout<<"要删除的子串不存在!"<<endl; p1=q; q=q->next; } j=i; for(i=1;i<=len;i++) { if(q==NULL) cout<<"要删除的子串不存在!"<<endl; p2=q; q=q->next; free(p2); } if(j==1) S->next=q; else p1->next=q; show(S); } } void concat(sqstring*& T,sqstring* S1,sqstring* S2) { sqstring *q1,*q2,*p1,*p2; T=(sqstring *)malloc(sizeof(sqstring)); T->next=NULL; q1=T;p1=S1->next; p2=S2->next; while(p1!=NULL) { q2=(sqstring *)malloc(sizeof(sqstring)); q2->data=p1->data; q1->next=q2; q1=q2; p1=p1->next; } while(p2!=NULL) { q2=(sqstring *)malloc(sizeof(sqstring)); q2->data=p2->data; q1->next=q2; q1=q2; p2=p2->next; } q1->next=NULL; show(T); } void replace(sqstring*& T,sqstring* S,sqstring* V) { sqstring *sub; sqstring *q,*p; int lens; int i=1; lens=length(S); if(lens==0||lens>length(T)||length(V)!=lens) cout<<"输入的子串不存在!"<<endl; else { q=T->next; i=1; while(i<length(T)) { substring(sub,T,i,lens); if(compare(sub,S)!=0) { i++; q=q->next; } else { p=V->next; while(p!=NULL) { q->data=p->data; q=q->next; p=p->next; } i=i+lens; } } } show(T); } void substring(sqstring*& sub,sqstring* T,int pos,int len) { int i=1; sqstring *q,*p,*k; q=T->next; sub=(sqstring *)malloc(sizeof(sqstring)); if(pos<1||pos>length(T)||len<0||len>(length(T)-pos+1)) { cout<<"该子串不存在!"<<endl; sub->next=NULL;} else { sub->next=NULL; k=sub; if(!len) sub->next=NULL; else { while(i!=pos) { q=q->next; i++;} while(i<pos+len) { p=(sqstring *)malloc(sizeof(sqstring)); p->data=q->data; k->next=p; k=p; p=p->next; q=q->next; i++; } k->next=NULL; } } } void show(sqstring* T) { sqstring *q; if(T->next==NULL) cout<<"串为空串!"<<endl; else { cout<<"串为:"; q=T->next; while(q!=NULL) { cout<<q->data; q=q->next; } } cout<<endl; } void choice(void) { cout<<" "<<"请输入你的选择(1--10)"<<endl; cout<<" "<<"1---------串赋值"<<endl; cout<<" "<<"2---------串比较"<<endl; cout<<" "<<"3---------串长度"<<endl; cout<<" "<<"4---------串连接"<<endl; cout<<" "<<"5--------- 求字串"<<endl; cout<<" "<<"6--------- 串替换"<<endl; cout<<" "<<"7--------- 串删除"<<endl; } void new_line() { char symbol; do { cin.get(symbol); }while(symbol!='\n'); } void main() { sqstring *S,*S1,*S2,*sub; int n,pos,len; char a[100],b1[100],b2[100]; char k; do { choice(); cout<<"请输入你的选择:"; cin>>n; switch(n) { case 1: new_line(); cout<<"请输入要赋值的字符串:"<<endl; cin.getline(a,100); strassign(S,a); show(S); break; case 2: new_line(); cout<<"请输入要比较的字符串,字符串1为:"<<endl; cin.getline(b1,100); strassign(S1,b1); cout<<"请输入要比较的字符串,字符串2为:"<<endl; cin.getline(b2,100); strassign(S2,b2); if(compare(S1,S2)==1) cout<<"S1大于S2"<<endl; if(compare(S1,S2)==-1) cout<<"S1小于S2"<<endl; else cout<<"S1等于S2"<<endl; break; case 3:cout<<"串的长度为"<<length(S)<<endl;break; case 4: new_line(); cout<<"请输入要连接的字符串,字符串1为:"<<endl; cin.getline(b1,100); strassign(S1,b1); cout<<"请输入要连接的字符串,字符串2为:"<<endl; cin.getline(b2,100); strassign(S2,b2); concat(S,S1,S2); break; case 5: new_line(); cout<<"请输入字符串,字符串为:"<<endl; cin.getline(a,100); strassign(S,a); cout<<"请输入从第几个位置起求字串 "<<endl; cin>>pos; cout<<"请输入字串的长度 "<<endl; cin>>len; substring(sub,S,pos,len); if(sub->next!=NULL) show(sub); break; case 6: new_line(); cout<<"请输入字符串,字符串为:"<<endl; cin.getline(a,100); strassign(S,a); cout<<"请输入要替换的字串为"<<endl; cin.getline(b1,100); strassign(S1,b1); cout<<"请输入要替换字串为"<<endl; cin.getline(b2,100); strassign(S2,b2); replace(S,S1,S2); break; case 7: new_line(); cout<<"请输入字符串,字符串为:"<<endl; cin.getline(a,100); strassign(S,a); cout<<"请输入从第几个位置起删除字符串 "<<endl; cin>>pos; cout<<"请输入字串的长度 "<<endl; cin>>len; strdelete(S,pos,len); break; } cout<<"是否继续进行操作?(Y||y)"<<endl; cin>>k; }while(k=='Y'||k=='y'); }
评论
    相关推荐
    • .zip
      的一些理解与巩固,实现对的一些操作与完成
    • 字符计算器
      字符计算器 TDD-Kata分配(按字节)
    • 字符1304
      Java基础视频教程第13天 string字符04
    • 匹配算法
      研究算法 实现匹配 主要介绍蛮力法怎样实现匹配
    • 解析字符
      根据正则表达式解析字符,获取自己想要的新字符,一般用于抓取数据时使用。
    • C语言字符运算器
      C语言大作业,实现基本字符编辑,void listinput(char *s);//字符输入 void listoutput(char *s);//字符输出 int listlenth(char *s);//求长 void linklist(char *s,char *t);//连接 int listcompare(char...
    • 字符1307
      Java基础视频教程第13天 string字符07
    • 字符匹配BM
      Boyer-Moore字符搜索算法是一种非常高效的字符搜索算法。它由Bob Boyer和J Strother Moore设计于1977年。此算法仅对搜索目标字符(关键字)进行预处理,而非被搜索的字符。虽然Boyer-Moore算法的执行时间...
    • C语言字符处理函数
      几个字符处理函数增强版 常用需求基本都能完成 已经编译成DLL 函数列表 兼容字符和 void revstr char str 字符反转 int substring char res int pos int len char substr 从pos开始取len个字符到substr中 ...
    • 数据结构
      本资源系数据结构中的重要结构——。按照不同层次的要求,分别书写了1个简单的+1个复杂的。功能全面,界面清晰,是初学者的福音。