📄 sjjg.cpp
字号:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<malloc.h>
#define MALLOC (struct str *)malloc(sizeof str)
#define ENTER printf("\n")
#define STRLEN 81
struct str
{
char ch[STRLEN];
};
struct str *concat(struct str *s1,int i1,struct str *s2,int i2) //连接两个字符串
{struct str *s;
s=MALLOC;
int j=0;
for(;j<=i1;j++)
{
s->ch[j]=s1->ch[j];
}
for(j=0;j<=i2;j++,i1++)
{
s->ch[i1]=s2->ch[j];
}
return s;
}
int len(struct str *s) //计算字符串长度
{int j=0,i=0;
while(s->ch[i]!='\0')
{ i++;
j++;
}
return j;
}
void change1(struct str *s,int i) //大小写切换
{
//s=(struct str *)malloc(sizeof str);
int j=0;
for(;j<=i;j++)
{
s->ch[j]=s->ch[j]-32;
}
}
void change() //数制转换
{
int i=0,j=0,m=0;
int b=0;
struct str *a;
a=MALLOC;
printf("请输入一个16进制数:\n");
/*
do
{
scanf("%c",&a->ch[i]);
i++;
}
while(a->ch[i]=='\n');
*/
gets(a->ch);
for(;a->ch[i]!='\0';i++);
for(;j<i;j++)
if(a->ch[j]>=65&&a->ch[j]<=70)
a->ch[j]=a->ch[j]-55;
for(j=0;j<i;j++)
if(a->ch[j]>=48&&a->ch[j]<=57)
a->ch[j]=a->ch[j]-48;
m=i;
for(j=0;j<i;j++,m--)
b=b+a->ch[j]*pow(16,m-1);
printf("该数的十进制形式:%d\n",b);
}
void combine() //字符串比较
{
int i1,i2,j,l;
struct str *s1;
struct str *s2;
s1=MALLOC;
s2=MALLOC;
printf("请输入两个字符串:\ns1:\n");
gets(s1->ch);
printf("s2:\n");
gets(s2->ch);
i1=len(s1);
i2=len(s2);
i1>=i2? j=i1:j=i2;
for(l=0;l<j;l++)
{
if(l==j-1&&s1->ch[l]==s2->ch[l]){printf("s1=s2\n");break;}
else if(s1->ch[l]>s2->ch[l]) {printf("s1>s2\n");break;}
else if(s1->ch[l]==s2->ch[l]) continue;
else if(s1->ch[l]<s2->ch[l]) {printf("s1<s2\n");break;};
}
//S1:printf("s1>s2");
//S2:printf("s1>s2");
//SS:printf("s1=s2");
}
void strconcat() //大小写转换和字符串连接
{
int i1,i2,j;
struct str *s1,*s2,*s3;
s1=(struct str *)malloc(sizeof str);
s2=(struct str *)malloc(sizeof str);
s3=(struct str *)malloc(sizeof str);
printf("输入两个小写字母字符串:\n");
gets(s1->ch);
gets(s2->ch);
i1=len(s1);
i2=len(s2);
//printf("%d %d\n",i1,i2); //调试时检验len函数
change1(s1,i1);
change1(s2,i2);
printf("该两个字符串的大写形式为:\n");
for(j=0;j<=i1;j++)
printf("%c",s1->ch[j]);
ENTER;
for(j=0;j<=i2;j++)
printf("%c",s2->ch[j]);
ENTER;
s3=concat(s1,i1,s2,i2);
printf("将两个字符串的连接成:\n");
for(j=0;j<=i1+i2;j++)
printf("%c",s3->ch[j]);
ENTER;
//puts(s2->ch);
//puts(s1->ch);
}
void Delete() //空格删除的运算
{
int i;
int l;
int m;
int n=0;
int h=0;
int k=0;
struct str *s;
s=MALLOC;
printf("请输入一个字符串:\n");
gets(s->ch);
l=len(s);
for(i=0;i<l;i++)
{
if(s->ch[i]==' '||s->ch[i]=='\t')
{
for(m=i;m<=l-i+h;m++)
s->ch[m]=s->ch[m+1];
i--;
l--;
n=n+2;
for(;k<n;k++)h=h+2;
}
}
printf("删除空格后的字符串:\n");
for(i=0;i<l;i++)
printf("%c",s->ch[i]);
printf("\n");
}
void main() //主函数,实现菜单控制
{
char q;
printf("常用数据结构:\n");
printf("根据以下编号选择要实现的功能:\n");
printf("1. 数制转换运算(十六与十进制的转换)\n");
printf("2. 串的大小写转换和连接运算\n");
printf("3. 字符串的比较运算\n");
printf("4. 串的空格删除运算\n");
printf("0. 退出程序 \n");
q=getchar();
getchar();
switch(q)
{
case '1': change(); break;// 数制转换运算
case '2': strconcat(); break;// 串的大小写转换和连接运算
case '3': combine(); break;// 字符串的比较运算
case '4': Delete(); break;// 串的空格删除运算
case '0': return; //退出系统
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -