#define ElemType char
#define MAXSIZE 500
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<windows.h>
//非紧缩格式顺序串类型说明
typedef struct {
ElemType date[MAXSIZE];
int length;
}SqString;
//生成串
void StrAssign(SqString& s, ElemType str[])
{
int i;
s.length = 0;
for (i = 0; str[i] != '\0'; ++i)
{
//s.date[i] = str[i];
//ElemType c;
//c = str;
//strcpy(s.date, str);
//strcat(s.date[i], str[i]);
s.length++;
}
strcpy(s.date, str);
}
//销毁串
//串的复制----将s复制到t中
void StrCpy(SqString &t, SqString s)
{
int i;
for (i = 0; s.date[i] != '\0'; ++i)
{
t.date[i] = s.date[i];
}
t.length = s.length;
}
//串是否相等
bool StrEqual(SqString s, SqString t)
{
int i;
//先直接判断两个串的长度是否相等------因为简单直接、
if (s.length != t.length)
{
return false;
}
else
{
for (i = 0; i < s.length; ++i)
{
if (s.date[i] != t.date[i])
{
return false;
}
}
}
return true;
}
//求串长
int StrLen(SqString S)
{
return S.length;
}
//串的拼接----将t接到s后
SqString Concat(SqString &s, SqString t)
{
int i;
SqString k;
k = s;
k.length = s.length + t.length;
int j=0;
for (i = s.length; i <= k.length; ++i)
{
k.date[i] = t.date[j++];
}
//k.date[k.length] = '\0';
s = k;
return s;
}
//求子串---返回一个子串,由第i个到j个元素
SqString SubStr(SqString s, int i, int j)
{
int i1, j1;
SqString k;
k.length = 0;
if (i-j+1>s.length||s.length == 0||i<1||j>s.length)
{
printf("输入参数存在错误,返回空串\n");
return k;
}
i1 = i; j1 = j;
for (int q=0; i1 - 1 < j1; q++,i1++)
{
k.date[q]=s.date[i1 - 1];
k.length++;
}
k.date[k.length] = '\0';
return k;
}
//子串的插入---将s2插入到s1的第a个元素之后
SqString InsStr(SqString &s1, SqString s2, int a)
{
SqString k;
k.length = 0;
int i, j,n,m;
if (a > s1.length && a < 0)
{
return k;
}
s1.length += s2.length ;
for (i = a; i <= s2.length+1; i++)
{
s1.date[i + s2.length] = s1.date[i];
}
for (j=0,i = a ; j < s2.length; i++)
{
s1.date[i] = s2.date[j++];
}
k = s1;
return k;
}
//子串的删除
SqString DelStr(SqString& s1, int a, int b)
{
if (a>b||s1.length == 0 || a - b + 1 > s1.length || b > s1.length || a < 1)
{
SqString k;
k.length = 0;
s1 = k;
return s1;
}
int i,i2=0;
int j, n; n = b - a+1;
int i1 = s1.length - n-a;
s1.length -=n ;
for (i = a; i2 <= i1; i2++,++i)
{
j = i + n;
s1.date[i] = s1.date[j];
}
//s1.date[s1.length] = '\0';
return s1;
}
//子串的替换
SqString RepStr(SqString& s, SqString s1,int i,int j)
{
SqString k;
if (s.length == 0 || i<1 || i>s.length || i + j - 1 > s.length)
{
k.length = 0;
s = k;
return s;
}
int ns; //要替换的的长度
ns = j - i + 1;
printf("%d\n", ns);
for (int n = 0; n < ns; ++n)
{
s.date[i + n] = s1.date[n];
}
return s;
}
//输出串
void DisStr(SqString s)
{
if (s.length == 0)
{
printf("空串\n");
}
else
{
int i;
for (i = 0; s.date[i]!='\0'; ++i)
{
printf("串中第%d个元素为: %c\n", i + 1, s.date[i]);
if (i == 6)
{
printf("\n");
}
}
}
}
int main()
{
int choose;
SqString s;
while (1)
{
printf("\n");
printf("\n\t\t\t 菜 单 \n");
printf("\n\t\t\t\t\t***************************************\n");
printf("\n\t\t\t\t\t1-创 建 串 2-复 制 串 \n");
printf("\n\t\t\t\t\t3-判 断 串 相 等 4-求 串 的 长 度 \n");
printf("\n\t\t\t\t\t5-串 的 连 接 6-求 子 串 \n");
printf("\n\t\t\t\t\t7-子 串 的 插 入 8-删 除 子 串 \n");
printf("\n\t\t\t\t\t9-子 串 的 输 出 10-替 换 子 串 \n");
//printf("\n\t\t\t\t\t*************** 11.打印 ****************\n");
printf("\n\t\t\t\t\t*************** 0-退出 ****************\n");
printf("\n\t\t\t请选择:");
scanf("%d", &choose);
switch (choose)
{
case 1:
{
ElemType str[] = "woshinibaba";
StrAssign(s, str);
printf("\n");
system("pause");
break;
}
case 2:
{
SqString t;
ElemType sr[] = "wo zheng de Nb";
StrAssign(t, sr);
StrCpy(s, t);
printf("\n");
system("pause");
break;
}
case 3:
{
SqString t1;
ElemType sr[] = "wo zheng de Nb";
StrAssign(t1, sr);
if (!StrEqual(s, t1))
{
printf("不等\n");
}
else
{
printf("相等的\n");
}
printf("\n");
system("pause");
SqString s1;
ElemType str[] = "woshinibaba";
StrAssign(s1, str);
if (!StrEqual(s,s1))
{
printf("不等\n");
}
else
{
printf("相等的\n");
}
system("pause");
break;
}
case 4:
{
printf("串长为:%d\n", StrLen(s));
printf("\n");
system("pause");
break;
}
case 5:
{
SqString t;
ElemType sr[] = "wo zheng de Nb";
StrAssign(t, sr);
s=Concat(s, t);
printf("\n");
system("pause");
break;
}
case 6:
{
int num1, num2;
//num1 = 2; num2 = 5;
DisStr(s);
printf("你想要取第几个元素之后的数据:");
scanf("%d", &num1);
printf("在第几个元素停:");
scanf("%d", &num2);
SqString q6=SubStr(s, num1, num2);
printf("\n");
DisStr(q6);
printf("\n");
system("pause");
break;
}
case 7:
{
int num1, num2;
//num1 = 2; num2 = 5;
DisStr(s);
printf("你想要第几个元素之后的插:");
scanf("%d", &num1);
printf("在第几个元素停:");
scanf("%d", &num2);
SqString t;
ElemType sr[] = "wo zheng de Nb";
StrAssign(t, sr);
s=InsStr(s, t, num1);
DisStr(s);
printf("\n");
system("pause");
break;
}
case 8:
{
int num1, num2;
//num1 = 2; num2 = 5;
DisStr(s);
printf("你想要第几个元素之后进行删除:");
scanf("%d", &num1);
printf("在第几个元素停:");
scanf("%d", &num2);
s=DelStr(s, num1, num2);
DisStr(s);
printf("\n");
system("pause");
break;
}
case 9:
{
DisStr(s);
printf("\n");
system("pause");
break;
}
case 10:
{
int num1, num2;
//num1 = 2; num2 = 5;
DisStr(s);
printf("你想要第几个元素之后进行替换:");
scanf("%d", &num1);
printf("在第几个元素停:");
scanf("%d", &num2);
SqString t;
ElemType sr[] = "wo zheng de Nb";
StrAssign(t, sr);
RepStr(s, t, num1, num2);
printf("\n");
system("pause");
break;
}
case 0:
{
printf("程序结束");
return 0;
}
default:
{
printf("请在正确的选项中做出选择\n");
printf("\n");
system("pause");
break;
}
}
}
return 0;
}
今天370行!!
但是感觉有点乱,最近状态不是很好!!!
好好加油!!!
代码如下:
#define ElemType char
#define MAXSIZE 500
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<windows.h>
//非紧缩格式顺序串类型说明
typedef struct {
ElemType date[MAXSIZE];
int length;
}SqString;
//生成串
void StrAssign(SqString& s, ElemType str[])
{
int i;
s.length = 0;
for (i = 0; str[i] != '\0'; ++i)
{
//s.date[i] = str[i];
//ElemType c;
//c = str;
//strcpy(s.date, str);
//strcat(s.date[i], str[i]);
s.length++;
}
strcpy(s.date, str);
}
//销毁串
//串的复制----将s复制到t中
void StrCpy(SqString &t, SqString s)
{
int i;
for (i = 0; s.date[i] != '\0'; ++i)
{
t.date[i] = s.date[i];
}
t.length = s.length;
}
//串是否相等
bool StrEqual(SqString s, SqString t)
{
int i;
//先直接判断两个串的长度是否相等------因为简单直接、
if (s.length != t.length)
{
return false;
}
else
{
for (i = 0; i < s.length; ++i)
{
if (s.date[i] != t.date[i])
{
return false;
}
}
}
return true;
}
//求串长
int StrLen(SqString S)
{
return S.length;
}
//串的拼接----将t接到s后
SqString Concat(SqString &s, SqString t)
{
int i;
SqString k;
k = s;
k.length = s.length + t.length;
int j=0;
for (i = s.length; i <= k.length; ++i)
{
k.date[i] = t.date[j++];
}
//k.date[k.length] = '\0';
s = k;
return s;
}
//求子串---返回一个子串,由第i个到j个元素
SqString SubStr(SqString s, int i, int j)
{
int i1, j1;
SqString k;
k.length = 0;
if (i-j+1>s.length||s.length == 0||i<1||j>s.length)
{
printf("输入参数存在错误,返回空串\n");
return k;
}
i1 = i; j1 = j;
for (int q=0; i1 - 1 < j1; q++,i1++)
{
k.date[q]=s.date[i1 - 1];
k.length++;
}
k.date[k.length] = '\0';
return k;
}
//子串的插入---将s2插入到s1的第a个元素之后
SqString InsStr(SqString &s1, SqString s2, int a)
{
SqString k;
k.length = 0;
int i, j,n,m;
if (a > s1.length && a < 0)
{
return k;
}
s1.length += s2.length ;
for (i = a; i <= s2.length+1; i++)
{
s1.date[i + s2.length] = s1.date[i];
}
for (j=0,i = a ; j < s2.length; i++)
{
s1.date[i] = s2.date[j++];
}
k = s1;
return k;
}
//子串的删除
SqString DelStr(SqString& s1, int a, int b)
{
if (a>b||s1.length == 0 || a - b + 1 > s1.length || b > s1.length || a < 1)
{
SqString k;
k.length = 0;
s1 = k;
return s1;
}
int i,i2=0;
int j, n; n = b - a+1;
int i1 = s1.length - n-a;
s1.length -=n ;
for (i = a; i2 <= i1; i2++,++i)
{
j = i + n;
s1.date[i] = s1.date[j];
}
//s1.date[s1.length] = '\0';
return s1;
}
//子串的替换
SqString RepStr(SqString& s, SqString s1,int i,int j)
{
SqString k;
if (s.length == 0 || i<1 || i>s.length || i + j - 1 > s.length)
{
k.length = 0;
s = k;
return s;
}
int ns; //要替换的的长度
ns = j - i + 1;
printf("%d\n", ns);
for (int n = 0; n < ns; ++n)
{
s.date[i + n] = s1.date[n];
}
return s;
}
//输出串
void DisStr(SqString s)
{
if (s.length == 0)
{
printf("空串\n");
}
else
{
int i;
for (i = 0; s.date[i]!='\0'; ++i)
{
printf("串中第%d个元素为: %c\n", i + 1, s.date[i]);
if (i == 6)
{
printf("\n");
}
}
}
}
int main()
{
int choose;
SqString s;
while (1)
{
printf("\n");
printf("\n\t\t\t 菜 单 \n");
printf("\n\t\t\t\t\t***************************************\n");
printf("\n\t\t\t\t\t1-创 建 串 2-复 制 串 \n");
printf("\n\t\t\t\t\t3-判 断 串 相 等 4-求 串 的 长 度 \n");
printf("\n\t\t\t\t\t5-串 的 连 接 6-求 子 串 \n");
printf("\n\t\t\t\t\t7-子 串 的 插 入 8-删 除 子 串 \n");
printf("\n\t\t\t\t\t9-子 串 的 输 出 10-替 换 子 串 \n");
//printf("\n\t\t\t\t\t*************** 11.打印 ****************\n");
printf("\n\t\t\t\t\t*************** 0-退出 ****************\n");
printf("\n\t\t\t请选择:");
scanf("%d", &choose);
switch (choose)
{
case 1:
{
ElemType str[] = "woshinibaba";
StrAssign(s, str);
printf("\n");
system("pause");
break;
}
case 2:
{
SqString t;
ElemType sr[] = "wo zheng de Nb";
StrAssign(t, sr);
StrCpy(s, t);
printf("\n");
system("pause");
break;
}
case 3:
{
SqString t1;
ElemType sr[] = "wo zheng de Nb";
StrAssign(t1, sr);
if (!StrEqual(s, t1))
{
printf("不等\n");
}
else
{
printf("相等的\n");
}
printf("\n");
system("pause");
SqString s1;
ElemType str[] = "woshinibaba";
StrAssign(s1, str);
if (!StrEqual(s,s1))
{
printf("不等\n");
}
else
{
printf("相等的\n");
}
system("pause");
break;
}
case 4:
{
printf("串长为:%d\n", StrLen(s));
printf("\n");
system("pause");
break;
}
case 5:
{
SqString t;
ElemType sr[] = "wo zheng de Nb";
StrAssign(t, sr);
s=Concat(s, t);
printf("\n");
system("pause");
break;
}
case 6:
{
int num1, num2;
//num1 = 2; num2 = 5;
DisStr(s);
printf("你想要取第几个元素之后的数据:");
scanf("%d", &num1);
printf("在第几个元素停:");
scanf("%d", &num2);
SqString q6=SubStr(s, num1, num2);
printf("\n");
DisStr(q6);
printf("\n");
system("pause");
break;
}
case 7:
{
int num1, num2;
//num1 = 2; num2 = 5;
DisStr(s);
printf("你想要第几个元素之后的插:");
scanf("%d", &num1);
printf("在第几个元素停:");
scanf("%d", &num2);
SqString t;
ElemType sr[] = "wo zheng de Nb";
StrAssign(t, sr);
s=InsStr(s, t, num1);
DisStr(s);
printf("\n");
system("pause");
break;
}
case 8:
{
int num1, num2;
//num1 = 2; num2 = 5;
DisStr(s);
printf("你想要第几个元素之后进行删除:");
scanf("%d", &num1);
printf("在第几个元素停:");
scanf("%d", &num2);
s=DelStr(s, num1, num2);
DisStr(s);
printf("\n");
system("pause");
break;
}
case 9:
{
DisStr(s);
printf("\n");
system("pause");
break;
}
case 10:
{
int num1, num2;
num1 = 2; num2 = 5;
DisStr(s);
printf("你想要第几个元素之后进行替换:");
scanf("%d", &num1);
printf("在第几个元素停:");
scanf("%d", &num2);
SqString t;
ElemType sr[] = "wo zheng de Nb";
StrAssign(t, sr);
RepStr(s, t, num1, num2);
printf("\n");
system("pause");
break;
}
case 0:
{
printf("程序结束");
return 0;
}
default:
{
printf("请在正确的选项中做出选择\n");
printf("\n");
system("pause");
break;
}
}
}
return 0;
}