#include <stdio.h>
void StrAssign(char *T,char *chars)
{
int i=0;
while(*(chars+i))
{
*(T+i)=*(chars+i);
i++;
}
}
void StringCopy(char T[],char s[])
{
int i=0;
while(s[i]!='\0')
{
T[i]=s[i];
i++;
}
}
int StringEmpty(char s[])
{
if(*s=='\0')
return 1;
return 0;
}
void ClearString(char s[])
{
int i=0;
while(s[i]!='\0')
{
s[i] = '\0';
i++;
}
}
int StringLength(char s[])
{
int i=0;
while(s[i]!='\0')
i++;
return i;
}
int StrCompare(char s[],char T[])
{
int i;
for(i=0;s[i]!='\0';i++)
{
if(s[i]==T[i])
continue;
else if(s[i]>T[i])
return 1;
else
return -1;
}
if(s[i]=='\0')
return 0;
}
void Concat(char S1[],char s[],char T[])
{
int i=0,j;
while(s[i]!='\0')
{
S1[i]=s[i];
i++;
}
for(j=0;T[j]!='\0';j++)
{
S1[i]=T[j];
i++;
}
S1[i]='\0';
}
void SubString(char s1[],char s[],int pos,int len)
{
int i,j;
if(1<=pos&&pos<=StringLength(s)&&0<=len&&len<=StringLength(s)-pos+1)
{
for(i=0,j=pos-1;i<len;i++)
{
s1[i]=s[j];
j++;
}
s1[i]='\0';
}
else
printf("将pos后的len个字符赋给S1失败");
}
//若主串的第pos个字符 之后存在与T相等的子串,则返回第一个这样的子串在s中的位置,否则返回0
int Index(char s[],char T[], int pos)
{
int n,m,i;
char sub[100];
if(pos>0)
{
n=StringLength(s);
m=StringLength(T);
i=pos;
while(i<=n-m+1)
{
SubString(sub,s,i,m); //取主串的第I个位置给sub,长度与T相等子串给sub
if(StrCompare(sub,T)!=0)
++i;
else
return i;
}
}
return 0;
}
int StrDelete(char s[],int pos,int len)
{
if(1<=pos&&pos<=StringLength(s)-len+1)
{
int i,j;
i=pos-1;
j=pos+len-1;
while(s[j]!='\0')
{
s[i]=s[j];
j++;
i++;
}
s[i]='\0';
return 1;
}
else
return 0;
}
int StrInsert(char s[],int pos,char T[])
{
if(1<=pos&&pos<=StringLength(s)+1)
{
int i,j,n;
n=StringLength(T);
j=StringLength(s);
i=j+n-1;
s[i+1]=s[j];
while(j>=pos)
{
s[i]=s[j-1];
i--;
j--;
}
i = 0;
while(j<pos+n-1)
{
s[j]=T[i];
i++;
j++;
}
return 1;
}
return 0;
}
//串S,v,t都存在T是非空串,用V替换主串s中出现的所有与t相等的不重叠的子串
void Replace(char s[],char T[],char v[])
{
int n=1;
int m=Index(s,T,n);
while(m)
{
n=m+StringLength(T);
StrDelete(s,m,StringLength(T));
StrInsert(s,m,v);
m=Index(s,T,n);
}
}
int main()
{
char s[100];
printf("字符串的初始化\n请输入字符串:");
gets(s);
printf("字符串s初始化结果如下%s",s);
char T[100];
StrAssign(T,s);
StringCopy(T,s);
printf("\n将字符串s复制得字符串如下%s",T);
if(StringEmpty(s))
printf("\n字符串S为空");
else
printf("\n字符串不为空");
printf("\n字符串长度为%d",StringLength(s));
printf("\n输入与第一个字符串长度相同字符串T:");
gets(T);
if(StrCompare(s,T)==0)
printf("两个字符串相等");
else if (StrCompare(s,T)==1)
printf("前一个字符串大");
else
printf("后一个字符串大");
char S1[100];
Concat(S1,s,T);
printf("\n将字符串S与T合并后为%s",S1);
int temp,m;
printf("\n将s第几个位置的后的多少个元素赋值给S1: ");
scanf("%d",&temp);
scanf("%d",&m);
SubString(S1,s,temp,m);
printf("复制给S1后为%s",S1);
printf("\n请输入要将S的第几个位置的多少个元素删除");
scanf("%d",&temp);
scanf("%d",&m);
StrDelete(s,temp,m);
printf("%s",s);
printf("\n要将T插入到S中,输入字符串T:");
getchar();
gets(T);
printf("输入字符串插入的位置");
scanf("%d",&temp);
StrInsert(s,temp,T);
printf("将字符T插入到S的第i个字符后字符串S为%s",s);
getchar();
printf("\n字符串的比较,输入与S进行比较字符串T:");
gets(T);
if(Index(s,T,1))
printf("在S的第%d个字符后存在与T相等的子串",Index(s,T,2));
else
printf("s中第21个字符后不存在与T相等的子串");
printf("\n输入要替换的字符串");
gets(T);
printf("输入要将%s替换成那一个字符串",T);
char V[100];
gets(V);
Replace(s,T,V);
printf("替换后的字符串s为%s",s);
ClearString(s);
printf("\n字符串s已经被清空");
return 0;
}
字符串的操作
最新推荐文章于 2023-01-12 02:31:18 发布