chuan

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 256            //定义串允许的最大字符个数
typedef struct 
{
	char string[MAXSIZE];        //MAXSIZE为串的最大长度
	int len;                      //串的实际长度
}SSTRING;                      //串的顺序存储结构表示
            
int str_len(SSTRING *s)            //串的长度计算函数
{
    return s->len; 
}

void str_input(SSTRING *s)         //串的输入函数
 {
	int i=0;                   
	char ch;
	s->len=0;
	while((ch=getchar())!='\n')       //通过循环,从键盘输入一串字符串
	{
	s->string[i]=ch;
	i++;
	s->len++;
	}
	s->string[i]='\0';
}

SSTRING *str_rep(SSTRING *s1,SSTRING *s2,int pos)   
{   //将字符串S1从pos位置处替换S2串
    int i=0,j;
    for(j=pos-1;s1->string[j]!='\0';j++)          //从替换的起始位置开始
        if(s2->string[i]!='\0')
        {
            s1->string[i]=s2->string[i];       //进行替换
            i++;
        }
        else
        {
            break;
        }
    return s1;
}

SSTRING *str_con(SSTRING *s1,SSTRING *s2)   
{ //将字符串S2连接到S1串的后面,两个串合并成一个串,放到S1串中
    int i=s1->len,j=0,k;
    for(k=0;k<str_len(s2);k++) 
	{ 
		s1->string[i]=s2->string[j];
    	i++;
		j++;// 通过循环,将S2串的元素逐一复制到S1串的后面,
		s1->len++;// 合并成一个串。
	}
	s1->string[i]='\0';
    return s1;
}

SSTRING *str_sub(SSTRING *sub,SSTRING *s,int pos,int len) 
{//将串S第pos个字符开始的长度为len的字符序列复制到串sub中
   int i=pos-1,j=0,k;
   for(k=1;k<=len;k++)
   {
   		sub->string[i]=s->string[j];//逐一取出S串中从pos开始的元素,并复制到sub串中
       	sub->len++;//每复制完一个元素,sub串长度加1。
   		i++;
   		j++;
   }
   sub->string[j]='\0';
   return sub;
}

void str_print(SSTRING *s)
{//字符串输出显示
	int i;
	for(i=0;i<s->len;i++)
	putchar(s->string[i]);//依次将串中的字符逐一输出到屏幕显示。
    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;
	SSTRING str,str1,str2;   
    str.len=0;
	str1.len=0,str2.len=0;
	while(1)
	{
	showmenu();
	printf("    请输入你的选择:");
	scanf("%d",&no);
	switch(no)
	{
		case 1:printf("请输入一串字符:");
   			fflush(stdin);
   			str_input(&str);
   			length=str_len(&str);
   			printf("字符串:%s的长度为%d\n",str.string,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("子串为:");
                   puts(str.string);
   			system("pause");
   			system("cls");
   			break;
		case 5:
   			return;
	}
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值