c语言字符串的基本操作(湖北汽车工业学院数据结构实验)
发布时间
阅读量:
阅读量
#include<stdio.h>
#include<stdlib.h>
//#define NULL 0
typedef struct node
{
char ch;
struct node *next;
}STRNODE; //串的链式存储结构表示
int str_len(STRNODE *s) //串的长度计算函数/
{
return s->ch;
}
void str_input(STRNODE *s) //串的输入函数/
{
int i=0;
char ch;
STRNODE *p,*q;
p=s;
q=s->next;
s->ch=0;
while((ch=getchar())!='\n') //通过循环,从键盘输入一串字符串
{
q=(STRNODE *)malloc(sizeof(STRNODE));
q->ch=ch;
q->next=NULL;
p->next=q;
p=q;
s->ch++;
}
}
STRNODE *str_rep(STRNODE *s1,STRNODE *s2,int pos)
{ //将字符串S1从pos位置处替换S2串
int i=1;
STRNODE *p,*q;
p=s1->next;
q=s2->next;
while(p!=NULL&&i!=pos)
{
i++;
p=p->next;
}
for(i=1;i<=s2->ch;i++)
{
p->ch=q->ch;
p=p->next;
q=q->next;
}
return s1;
}
STRNODE *str_con(STRNODE *s1,STRNODE *s2)
{ //将字符串S2连接到S1串的后面,两个串合并成一个串,放到S1串中/
STRNODE *p;
p=s1;
while(p->next!=NULL)
{
p=p->next;
}
p->next=s2->next;
s1->ch+=s2->ch;
return s1;
}
STRNODE *str_sub(STRNODE *sub,STRNODE *s,int pos,int len)
{//将串s第pos个字符开始的长度为len的字符序列复制到串sub中
int i;
STRNODE *p,*q,*p1;
if(pos>s->ch)
{
printf("输入子串起始位置超过字符串总长度!\n");
printf("请重新输入子串起始位置!");
scanf("%d",&pos);
}
p1=s->next;
p=sub;
q=sub->next;
sub->ch=0;
for(i=1;i<=pos;i++)
{
p1=p1->next;
}
for(i=1;i<=len&&(i+pos-1)<s->ch;i++)
{
q=(STRNODE *)malloc(sizeof(STRNODE));
q->ch=p1->ch;
q->next=NULL;
p->next=q;
p=q;
p1=p1->next;
sub->ch++;
}
return sub;
}
void str_print(STRNODE *s)
{//字符串输出显示
int i;
STRNODE *p;
p=s->next;
for(i=0;i<s->ch;i++)
{
putchar(p->ch);
p=p->next;
}
printf("\n");
}
void showmenu()
{ //显示菜单
printf(" 欢迎使用串操作小软件\n");
printf("\t1、求串的长度\n");
printf("\t2、串的替换\n");
printf("\t3、串的连接\n");
printf("\t4、求子串\n");
printf("\t5、退出程序\n");
}
void main()
{
int position,length,no;
STRNODE str,str1,str2;
str.ch=0;
str1.ch=0,str2.ch=0;
while(1)
{
showmenu();
printf(" 请输入你的选择:");
scanf("%d",&no);
switch(no)
{
case 1:printf("请输入一串字符:");
fflush(stdin);
str_input(&str);
length=str_len(&str);
printf("字符串:");
str_print(&str);
printf("长度为:%d\n",length);
system("pause");
system("cls");
break;
case 2:printf("请输入源字符串:");
fflush(stdin);
str_input(&str1);
printf("请输入替换字符串:");
fflush(stdin);
str_input(&str2);
printf("请输入替换位置:");
scanf("%d",&position);
str_rep(&str1,&str2,position);
printf("替换后的结果为:");
str_print(&str1);
system("pause");
system("cls");
break;
case 3:printf("请输入第一串字符:");
fflush(stdin);
str_input(&str1);
printf("请输入第二串字符串:");
fflush(stdin);
str_input(&str2);
str_con(&str1,&str2);
printf("两串字符连接后的结果为:");
str_print(&str1);
system("pause");
system("cls");
break;
case 4:printf("请输入一串字符:");
fflush(stdin);
str_input(&str1);
printf("请输入取子串的位置和长度:");
scanf("%d%d",&position,&length);
str_sub(&str,&str1,position,length);
printf("子串为:");
str_print(&str);
system("pause");
system("cls");
break;
case 5:
return;
}
}
}
全部评论 (0)
还没有任何评论哟~
