串
来源:互联网 发布:什么软件字体好看 编辑:程序博客网 时间:2024/04/30 12:11
/////////////////串用数组表示的基本操作--------S[0]存放字符串中的字符个数,字符串的起始地址是S+1____谨记/////////////////
#include<stdio.h>
#include"stdlib.h"
#include<string.h>
#define MASIZED 255
#define ERROR 0
typedef unsigned char SString[MASIZED+1];
void SString0_value(SString S){// 将当前字符数组中的元素个数,放到,该数组的S[0]中
int m;
for(m=1;S[m] != '\0';m++);
S[0]=m-1;
S[S[0]+1]='\0';
printf("successfull!!: %d\n",S[0]);
}
void in_a_SString(SString S,int n,char a){//向字符串的第n个位置插入单个字符,每次插入一个字符,s[0]就会自动增1
int i;
SString0_value(S);
// printf("%d\n",S[0]);
for(i=S[0];i>=n;i--)
S[i+1]=S[i];
S[n]=a;
S[S[0]+2]='\0';
S[0]++;
printf("in successful!!!\n");
}
//遍历字符串
void bianli_SString(SString S ){
printf("%s\n",S+1);
}
//向串中的第n个位置插入s1串
void in_S1_n_SString(SString S,int n,SString S1){
int i,l,t;
l=strlen(S1);//测出S1的长度
SString0_value(S);
printf("%d\n",l);
for(i=S[0];i>=n;i--)
S[i+l]=S[i];
i=0,t=0;
while(S1[t++] != '\0'){//while(l--)也行
S[n++]=S1[i++];
S[0]++;
}
S[S[0]+1]='\0';
printf("S[0]= %d\n",S[0]);
}
//清空字符串
void clear_SString(SString S){
S[1]='\0';
S[0]=0;
printf("clear successfull!!!\n");
}
//比较两个字符串,相等返回0,前者大于后者返回1,后者大于前者返回-1
int compare_SString(SString S,SString S1){
int l=strlen(S1),i=1,j=0,n=1,m=0;
SString0_value(S);//此处是将从S+1开始的s串中的字符个数,赋值给S[0]
while(S[i++] !='\0' && S1[j++] != '\0'){
if(S[n++] > S1[m++]) return 1;
else if(S[n++] < S1[m++]) return -1;
}
printf("%d,%d\n",S[0],l);
if(S[0] != l) {printf("to here !!\n");return 1;}//说明S长
else return 0;
}
//复制s1至s中,长度是以s为准,不会增减
void copy_S1_SString(SString S,SString S1){
int i=1,j=1;
SString0_value(S);
SString0_value(S1);
while(S[i++] != '\0' && S1[j++] !='\0'){
S[i-1]=S1[j-1];
}
}
//将s1的字符串,复制到S中,如果,s1长则,需要将S增长
void Copy_S1_S_SString(SString S,SString S1){
int i=1,j=1,n,m;
SString0_value(S);
SString0_value(S1);
while(S[i++] != '\0' && S1[j++] !='\0'){
S[i-1]=S1[j-1];
}
n=i-1;m=j-1;
if(m<S1[0]) {
while(S1[j++] != '\0'){
printf("j is : %d.....i is :%d\n",j,i);
S[i-1]=S1[j-1];i++;S[0]++;
//printf("to here!!\n");
}
S[S[0]+1]='\0';
}
printf("S is :%d\n",S[0]);
}
//将s和s1这两个字符串链接在一起
void contact_SStirng(SString T,SString S,SString S1){
int i=1,m,q;
SString0_value(S);
SString0_value(S1);
m=S1[0];q=S[0];
if(S[0]+S1[0] <= MASIZED ){
Copy_S1_S_SString(T,S);
printf("T[0] IS:%d\n",m);
while(m--){
T[++q]=S1[i++];
}
T[q+1]='\0';
}
}
//查找在S中和S1相同的串,并返回,是第几个元素开始相同
int search_S1_SString(SString S,SString S1){
int i,j,n=1,t;
SString0_value(S);
SString0_value(S1);
for(i=1;i<=S[0]-S1[0]+1;i++){
j=i;t=j;
while(S1[n++] != '\0'){
if(S[j++] != S1[n-1]) {
n=1;
break;
}//if
}//while
if((n-2)== S1[0])
{
printf("find it\n");
return t;
}//if
//printf("to here!!\n");
}//for
return ERROR;
}//search
//用sub串返回,字符串中从第pos个位置起,长度为len的字符串
void back_sub_SString(SString sub,SString S,int pos,int len){
int i=1;
//SString0_value(sub);//这里注意,为什么,这里sub[0]是9,纳闷????????????????????
//sub[0]=0;
//sub[1]='\0';
clear_SString(sub);
SString0_value(S);
if(1<=pos<=S[0] && 0<=len<=S[0]-pos+1){
while(len--){
sub[i++]=S[pos++];sub[0]++;
}
sub[sub[0]+1]='\0';
}//if
else printf("error!!\n");
//printf("%d.......\n",sub[0]);
}//back
//用v替代,s中存在的t串,这里该v串同t串长度相等
int represent_V_T_SString(SString S,SString T,SString V){
int i,t=1;
i=search_S1_SString(S,T);
SString0_value(V);/////////////
printf("%d..........\n",V[0]);
if(i==0) return ERROR;
while(V[t++] != '\0'){
S[i++]=V[t-1];
}
return 1;
}
int main(){
//SString S,S1,T;
SString S,T,V;
//int n;
//char *S1;
printf("input the S: ");
scanf("%s",S+1);
printf("input the T: ");
scanf("%s",T+1);
printf("input the S: ");
scanf("%s",V+1);
//printf("input the S1: ");
//scanf("%s",S1+1);
//向字符串中的第n个位置插入字符串S1
//in_S1_n_SString(S,n,S1);
//向字符串中的第n个位置插入字符A
//in_a_SString(S,n,'A');
//复制s1至s,s的长度不会改变
//copy_S1_SString(S,S1);
//s1复制到s中,若s1长于s那么,以s1为准,即增加s的长度,使得s可以容下s1
//Copy_S1_S_SString(S,S1);
////////////////////////////////////////////////////////////////////////////////////////
//寻找字符串s中的与字符串相等的起始角标,当输出n为0时表示s中没有子串s1
//n=search_S1_SString(S,S1);
//printf(" 0 is error:%d\n",n);
////////////////////////////////////////////////////////////////////////////////////////
//将s和s1链接在t中
//contact_SStirng(T,S,S1);
//遍历字符串
//bianli_SString(T);
//比较两个字符串的大小(注意S的S[0]是存放其长度的,实际串是从S+1开始的)(而S1,串的起始地址是S1)//若自己用着不舒服可以简单的修该一下
//printf("the ansew is :%d\n",compare_SString(S,S1));
//用sub串返回,字符串中从第pos个位置起,长度为len的字符串
//back_sub_SString(sub,S,4,3);
//bianli_SString(sub);
represent_V_T_SString(S,T,V);
bianli_SString(S);
//清空字符串后,S[0]为0,S[1]='\0'
//clear_SString(sub);
return 0;
}
- 串
- 串
- 串
- 串
- 串
- 串
- 串
- 串
- 串
- 串
- 串
- 串
- 串
- 串
- 串
- 串
- 串
- 串
- linux、windows下利用Nginx对Tomcat做负载均衡
- AS3:让人叹为观止的Flash作品
- Learning和Vision中的小进展和大进展(转载MIT牛人林达华)
- UE中使用正则表达式的一些技巧
- Linux 实时时钟(RTC)驱动调试
- 串
- pen...for ...using
- 第三篇 CAS单点登录和登出
- POJ题目分类
- 35kV继电保护试验(电容器柜)
- 字符串相似度问题
- hdu2457 DNA repair
- HTTP 通讯 消息内容以 XML 的方式进行相互之间的通信 实例
- linux下无密码 连接ssh