字符串是计算机中使用非常广泛的一种结构。许多语言都提供了串处理运行程序。在C语言中,提供了非常丰富的串处理函数。这里举几种串运算,并用C语言实现这些运算。
- strlen(s)
求出串s的长度。若s是一个空串,则strlen(s) = 0。 - strcat(s1, s2)
将s2加到s1的末尾 - strsub(s1,i, j, s2)
从s1中位置i开始取长度为j的字串构成串s2 - strins(s1,i,s2)
将串s2插入在s1的位置i上 - strdel(s,i,j)
从串s中的位置i开始,删除j个字符。如果s串中从位置i开始的字符个数不足j个则删除从i开始的所有字符。 - strequ(s1,s2)
判断s1和s2是否相同。
代码实现:
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100
typedef enum{fail,success} status;
typedef enum{false,true} boolean;
int strlen(char* s);
status strcat(char *s1,char* s2);
status strsub(char *s1,int i,int j,char* s2);
status strins(char *s1,int i,char* s2);
status strdel(char* s,int i,int j);
boolean strequ(char *s1,char*s2);
int main()
{
char s[MAXN] = "abcde";
char s1[MAXN] = "12345";
char s2[MAXN] = "6789";
printf("s: %s\n",s);
printf("s1: %s\n",s1);
printf("s2: %s\n",s2);
strcat(s1,s2);
printf("strcat s1: %s\n",s1);
strdel(s,2,5);
printf("strdel s: %s\n",s);
strins(s,1,s1);
printf("strins s s1: %s\n",s);
char s3[MAXN];
strsub(s,1,8,s3);
printf("s3 %s",s3);
return 0;
}
int strlen(char* s)
{
int i;
for(i = 0;s[i] != '\0';i++);
return i;
}
status strcat(char *s1,char* s2)
{/*将s2加到s1的末尾*/
int i,j,k;
if((i = strlen(s1)) + (j = strlen(s2)) > MAXN)
return fail;
for( k = 0;k <= j;k++)
{
s1[i+k] = s2[k];
}
return success;
}
status strsub(char *s1,int i,int j,char* s2)
{/*从s1中位置i开始取长度为j的字串构成串s2*/
int m,k;
if(i < 0 || i >= (m = strlen(s1)))
return fail;
if(j < 0 || i + j > m)
return fail;
for( k = 0; k < j;k++)
s2[k] = s1[i+k];
s2[k] = '\0';
return success;
}
status strins(char *s1,int i,char* s2)
{/*将串s2插入在s1的位置i上*/
int m,n,k;
if(i < 0 || i > (m = strlen(s1)) || m+(n = strlen(s2)) > MAXN)
return fail;
for(k = m; k >= i;k--)
{
s1[k+n] = s1[k];//为s2挪位置
}
for(k = 0; k < n;k++)
{
s1[i+k] = s2[k];//插入s2
}
return success;
}
status strdel(char* s,int i,int j)
{/*从串s中的位置i开始,删除j个字符。
如果s串中从位置i开始的字符个数不足j个则删除从i开始的所有字符*/
int m,k;
if(i < 0 || i >= (m = strlen(s)))
return fail;
if(i+j >= m)
s[i] = '\0';//从位置i开始的字符个数不足j个,置s[i]为'\0'
else{
for(k = 0;k <= m-i-j;k++)
s[i+k] = s[i+j+k];
}
return success;
}
boolean strequ(char *s1,char*s2)
{/*判断s1和s2是否相同*/
int i = 0;
while(s1[i] == s2[i] && s1[i] != '\0' && s2[i] != '\0') i++;
if(s1[i] == '\0' && s2[i] == '\0')
return true;
else
return false;
}