📄 string.c
字号:
#include <stdio.h> /*顺序串*/
#define MAXSIZE 255 /*假设要处理的串的长度不会超过254*/
/*在本程序中数组的0元素没有使用*/
typedef struct
{ char s[MAXSIZE];
int len; /*串的实际长度*/
}SeqString;
void StrAssign(SeqString* r)
/*将屏幕输入的字符串赋给字符串r*/
{
char c;
int i=1;
c=getchar();
while(c!='\n') /* \n是回车换行符 */
{
r->s[i]=c;
c=getchar();
i++;
}
r->len=i-1;
}
int StrLen(SeqString* r)
{
return r->len;
}
int StrCat(SeqString* r1, SeqString* r2)
/*将串r2紧接着放在串r1的末尾,与r1联接起来构成一个新的串,存放于r1*/
{ int i;
if ((r1->len+r2->len)<=MAXSIZE)
{ for(i=1; i<=r2->len; i++)
r1->s[r1->len+i]=r2->s[i]; /*把r2->s连接到r1->s之后*/
r1->len=r1->len+r2->len;
return 1;
}
else
{
for (i=1; i<=(MAXSIZE-r1->len); i++) /*如果两个字符串长度和大于串的最大长度,
则发生截断*/
r1->s[r1->len+i]=r2->s[i];
r1->len=MAXSIZE;
return 0;
}
}
void StrSub (SeqString* r1,SeqString* r2,int i,int piecelen)
/*返回从串S的第i个字符开始(包括第i个字符)的长度为 piecelen 的子串*/
/* r1为主串,r2为子串,i为起始位置,piecelen为子串长度*/
{ int k;
if (i+piecelen-1>r1->len)
{ printf("\n\t子串超界!");
return;
}
else
{
for(k=1; k<=piecelen; k++)
r2->s[k]=r1->s[i+k-1]; /*把子串赋给r2*/
r2->len=piecelen;
}
}
int StrInsert(SeqString* r1,int i, SeqString* r2)
/*将串T插入到串S 的第i个字符之后*/
{ int k;
if (i>=r1->len+1 || r1->len+r2->len>MAXSIZE)
{
printf("\n\t不能插入!");
return 0;
}
else if (i==0)
{
for (k=r1->len+r2->len; k>=r2->len+1;k--)
r1->s[k]=r1->s[k-r2->len];
for( k=1; k<=r2->len;k++)
r1->s[k]=r2->s[k];
r1->len=r1->len+r2->len;
return 1;
}
else if (i==r1->len)
{
for (k= 1; k<= r2->len; k++)
r1->s[r1->len+k]=r2->s[k];
r1->len=r1->len+r2->len;
return 1;
}
else
{ for(k=r1->len;k>i;k--)
r1->s[r2->len+k]=r1->s[k]; /*将r后移*/
for(k=1;k<=r2->len;k++)
r1->s[i+k]=r2->s[k]; /*将r1插入到r中*/
r1->len=r1->len+r2->len;
return 1;
}
}
int StrDelete(SeqString* r,int i,int piecelen)
/*删除串S 中从第i个字符开始(包含第i个字符)的长度为piecelen的子串*/
{
printf("\n\t请学生自己实现程序代码!");
}
int StrIndex(SeqString* r1,SeqString* r2)
/*返回模式r2在主串r1中第一次出现的位置。若不存在,则函数值为零,其中r2非空*/
{
printf("\n\t请学生自己实现程序代码!");
}
int StrReplace(SeqString* r1,int i,SeqString* r2)
/*用串r2 替换串r1中自第i个字符开始,长度与r2相等的子串*/
{
printf("\n\t请学生自己实现程序代码!");
}
int StrCmp(SeqString* r1,SeqString* r2)
/*比较两个字符串的大小。字符的大小是由该字符在ASCII码及国标码中出现的先后次序确定,
出现在前的字符小于出现在后的字符。串的大小通常是按字典序定义*/
{
printf("\n\t请学生自己实现程序代码!");
}
int ShowString(SeqString* r) /*显示字符串*/
{
int i=1;
printf("\n\t");
for(i=1;i<=r->len;i++)
printf("%c",r->s[i]);
printf("\n");
}
main()
{ SeqString a,b;
SeqString *r=&a;
char choice;
int i,piecelen,ch=1;
while(ch!=0)
{ printf("\n\n\n\n");
printf("\t\t\t--顺 序 串--\n");
printf("\n ***********************************************");
printf("\n * 1-----------求 串 长 *");
printf("\n * 2-----------连 接 字 串 *");
printf("\n * 3-----------取 出 子 串 *");
printf("\n * 4-----------删 除 子 串 *");
printf("\n * 5-----------插 入 子 串 *");
printf("\n * 6-----------模 式 匹 配 *");
printf("\n * 7-----------子 串 替 换 *");
printf("\n * 8-----------串 比 较 *");
printf("\n * 9-----------显 示 串 *");
printf("\n * 0-----------串 赋 值 *");
printf("\n * #-----------退 出 *");
printf("\n ***********************************************");
printf("\n\t请选择菜单号(0--9):");
scanf("%c",&choice);
getchar();
if (choice=='1')
{
printf("\n\t字符串的长度为: %d",StrLen(r));
}
else if (choice=='2')
{ printf("\n\t请输入第一个字符串...");
StrAssign(&a);
printf("\n\t请输入第二个字符串...");
StrAssign(&b);
StrCat (&a, &b);
printf("\n\t连接的结果为...");
ShowString(&a);
}
else if (choice=='3')
{ printf("\n\t请输入主串...");
StrAssign(&a);
printf("\n\t请输入子串在主串中的开始位置和长度(输入格式:位置,长度)...");
scanf("%d,%d",&i,&piecelen);getchar();
StrSub (&a,&b,i,piecelen);
printf("\n\t提取的子串是...");
ShowString(&b);
}
else if (choice=='4')
{
StrDelete(r,i,piecelen);
}
else if (choice=='5')
{ printf("\n\t请输入第一个字符串...");
StrAssign(&a);
printf("\n\t请输入第二个字符串...");
StrAssign(&b);
printf("\n\t请输入插入位置...");
scanf("%d",&i);getchar();
StrInsert(&a,i,&b);
printf("\n\t插入后的字符串为...");
ShowString(&a);
}
else if (choice=='6')
{
StrIndex(&a,&b);
}
else if (choice=='7')
{
StrReplace(&a,i,&b);
}
else if (choice=='8')
{
StrCmp(&a,&b);
}
else if (choice=='9')
{ printf("\n\t输入的字符串为:");
ShowString(r);
}
else if (choice=='0')
{ printf("\n\t请输入字符串:");
StrAssign(r);
}
else if (choice=='#')
{ ch=0;
printf("\n\t程序结束!\n");
}
else printf("\n\t输入错误! 请重新输入! \n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -