串的基本操作实现

#include<iostream>
using namespace std;
#include<string.h>
#define  Max 1024
typedef struct
{
	char data[Max];
	int curlen;
}SqString;
//创建
void create_str(SqString &s)
{
	cin >> s.data;
	s.curlen = strlen(s.data);
}

//字符串的输出
void Print_str(SqString s)
{
	cout << s.data << endl;
}

//求字符串的长度
int StrLenth(SqString &s)
{
	int j = 0;
	if (s.data[j] != '\0')
		return s.curlen;
}

//字符串的连接
void Concat_str(SqString &s1, SqString &s2, SqString &s)
{
	int j, k;j = k = 0;
	while (s1.data[j] != '\0')
		s.data[k++] = s1.data[j++];
	j = 0;
	while (s2.data[j] != '\0')
		s.data[k++] = s2.data[j++];
	s.data[k] = '\0';
}

//字符串的比较
int Comp_str(SqString &s, SqString &t)
{
	int i = 0;
	while (s.data[i] == t.data[i] && s.data[i] != '\0')
		i++;
	return (s.data[i] - t.data[i]);
}
//求子串
int Sub_str(SqString &t, SqString &s, int pos, int len)
{
	int slen, j;
	slen = StrLenth(s);
	if (pos<1 || pos>slen || len<0 || len>slen - pos + 1)
		return 0;
	for (j = 0;j<len;j++)
		t.data[j] = s.data[pos + j - 1];
	t.data[len] = '\0';
	return 1;
}


//字符串的删除操作
void Delete_str(SqString &s, int i, int length)
{
	int j;
	for (j = i + length - 1;j<s.curlen;j++)
		s.data[j - length] = s.data[j];
	s.data[j - length] = '\0';
}
//字符串的插入操作
void Insert_str(SqString &s, int i, SqString t)
{
	int j;
	for (j = s.curlen - 1;j >= i - 1;j--)
		s.data[j + t.curlen] = s.data[j];
	for (int k = 0;k<t.curlen;k++)
		s.data[++j] = t.data[k];
	s.data[s.curlen + t.curlen] = '\0';
}

//字符串的子串定位操作
int Index_str(SqString s, SqString t)
{
	int i = 0;
	int j = 0;
	while (i<s.curlen&&j<t.curlen)
	{
		if (s.data[i] == t.data[j])
		{
			i++;j++;
		}
		else
		{
			i = i - j + 1;
			j = 0;
		}
	}
	if (j == t.curlen)
		return i - t.curlen + 1;
	else
		return 0;
}

int main()
{
	int flag = 1;
	SqString s, s1, t;
	cout << "1:    表示查找或定位\n2:   表示插入\n3:   表示删除\n4:    表示串连接\n5:    表示串比较\n6:    表示求子串\n7     表示求串长"<<endl;
	cout << "请输入你要执行的操作对应的数字:" << endl;
	while (flag)
	{
		int n;cin >> n;
		switch (n)
		{

		case 1:	//查找或定位	
			cout << "请输入比较的两个字符串:\n";
			create_str(s);create_str(t);
			int pos;
			pos = Index_str(s, t);
			cout << pos;break;
		case 2://输入
			int i;
			cout << "请输入两个字符串:\n";
			create_str(s);create_str(t);
			cout << "请输入插入的位置:";
			cin >> i;
			Insert_str(s, i, t);
			Print_str(s);break;
		case 3://删除
			int length;
			cout << "请输入字符串:\n";
			create_str(s);
			cout << "请输入删除位置和截断长度:";
			cin >> i >> length;
			Delete_str(s, i, length);
			Print_str(s);break;
			/**/
		case 4://串连接
			cout << "请输入两个字符串:\n";
			create_str(s);create_str(t);
			Concat_str(s, t, s1);
			Print_str(s1);break;
		case 5:
			cout << "请输入两个字符串:\n";
			create_str(s);create_str(t);
			int back;
			back = Comp_str(s, t);
			cout << back;break;
		case 6://求子串
			cout << "请输入字符串:\n";
			create_str(s);
			cout << "请输入位置和截取长度:";
			cin >> i >> length;
			Sub_str(t, s, i, length);
			Print_str(t);break;
		case 7://求串长
			cout << "请输入字符串:\n";create_str(s);
			length = StrLenth(s);
			cout << length;break;
		}
	}
	return 0;
}

 

运行结果部分截屏如下:

 

更多精彩内容请关注公众号:干货分享录

  • 3
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sustyle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值