//顺序串基本运算
#include <stdio.h>
#define MAXSIZE 50
int StrLength(char *s); //求串长
int StrCat(char s1[], char s2[]); //串连接
int SubStr(char *s, char t[], int i, int len); //求子串
int StrCmp(char *s1, char *s2); //串比较
int StrInsert(char *s, int i, char *t); //串插入
int main()
{
char x1[50] = "abcdefghijk", x2[30] = "mnopqrstuvwxyz", x3[20];
puts(x1); //输出串1
printf("Length of string x1 is %d\n", StrLength(x1)); //输出串 x1 的长度
//求两个串的连接
if (StrCat(x1, x2))
{
printf("Output x1 after chain:\n"); //输出连接后的串 x1
puts(x1);
}
else
{
printf("Chain x1 and x2 fail!\n");
}
//求一个串的子串
if (SubStr(x1, x3, 5, 12)) //对x1 求字串并存放到串x3 中
{
printf("String:\n");
puts(x3); //输出存放在x3 中的子串
}
else
{
printf("Sub Sting get error!\n");
}
//字符串比较函数
if (StrCmp(x1, x2) > 0)
{
printf("x1 is larger!\n");
}
else
{
if (StrCmp(x1, x2) == 0)
{
printf("Equal!\n");
}
else
{
printf("x2 is larger!\n");
}
}
//将字符串插入到串x2 中
if (StrInsert(x2, 5, "aaaaa"))
{
printf("Output x2 after insert!\n");
puts(x2);
}
else
{
printf("Insert fail!\n");
}
return 0;
}
int StrLength(char *s)
{
int i = 0;
while (s[i] != '\0')
{
i++;
}
return i;
}
int StrCat(char s1[], char s2[])
{
int i, j, Len1, Len2;
Len1 = StrLength(s1);
Len2 = StrLength(s2);
if (Len1 + Len2 > MAXSIZE - 1)
{
printf("串长不够,连接失败!\n");
return 0;
}
i = 0;
j = 0;
while (s1[i] != '\0')
{
i++;
}
while (s2[j] != '\0')
{
s1[i] = s2[j];
i++;
j++;
}
s1[i] = '\0'; //置串结束标志
return 1;
}
int SubStr(char *s, char t[], int i, int len)
{
int j, Slen;
Slen = StrLength(s);
if (i > len || i < 1 || len > Slen - i + 1 || len < 0) //len 是子串的长度
{
printf("给定参数有错!\n");
return 0;
}
for (j = 0; j < len; j++)
{
t[j] = s[i+j-1]; //从第i-1 个位置开始
}
t[j] = '\0'; //给子串t 置结束标志
return 1;
}
int StrCmp(char *s1, char *s2)
{
int i = 0;
while (s1[i] == s2[i] && s1[i] != '\0')
{
i++;
}
return (s1[i] - s2[i]); //返回值可以大于、小于或等于0
}
int StrInsert(char *s, int i, char *t)
{ //将串t 插入到串s 的第i 个字符位置上,指针s 和t 指向存储字符串的字符数组
char str[MAXSIZE];
int j, k, len1, len2;
len1 = StrLength(s);
len2 = StrLength(t);
if (i < 0 || i > len1 + 1 || len1 + len2 > MAXSIZE - 1)
{
printf("参数不正确或主串s 的数组空间插不下子串t.\n");
return 0;
}
k = i;
for (j = 0; s[k] != '\0'; j++)
{
str[j] = s[k++]; //第一步:将串s 要插入位置i 之后的子串 先保存下
}
str[j] = '\0';
j = 0;
while (t[j] != '\0')
{
s[i] = t[j]; //第二步:把串t 插入到主串s 的位置i处
i++;
j++;
}
j = 0;
while (str[j] != '\0')
{
s[i] = str[j]; //第三步:把原来主串i 之后的那个子串,重新接回主串
i++;
j++;
}
s[i] = '\0'; //置串s 结束标志
return 1;
}
顺序串基本运算
最新推荐文章于 2025-03-11 11:12:01 发布