#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int SIZE=20;
const char name[] = { "奥特曼" };
const char code[] = { "1234" };
void Addarr(char *a,char b,int c);
char *Delarr(char *a,char b);
char Sumarr(char *a);
int Huiarr(char *a);
void Backarr(char *a);
void Backarr(char *a);
void Menu();
int main()
{
char a[SIZE];
char *str1;
char*arr=a;
char b,out;
int c=0,sum=0;
int len=strlen(a);
char arr1[10] = {};
char arr2[20] = {};
char arr3[20];
char *str=arr3;
int i,t=1,index;
printf("请输入用户名和密码:\n");
for (i = 0; i < 3; i++)
{
printf("请输入用户名:\n");
gets(arr1);
printf("请输入密码:\n");
gets(arr2);
if ((strcmp(arr1, name) || strcmp(arr2, code)) == 0)
{
printf("登陆成功!!!\n");
printf("*************\n");
printf("请输入字符串:\n");
gets(arr);
break;
}
else
printf("重新输入:\n");
}
if (i == 3)
printf("退出系统");
system("pause");
while(t)
{
Menu();
printf("请输入你要使用的功能号:\n");
scanf("%d",&index);
switch(index)
{
case 1:
printf("请输入要删除的元素:\n");
scanf("%s",&out);
getchar();
str1=Delarr(a,out);
printf("删除后的字符串为:\n");
puts(str1);
break;
case 2:
printf("请输入插入元素和位置:\n");
scanf("%c,%d",&b,&c);
if(c < 0 || c > len)
printf("超出范围!!!\n");
else
{
Addarr(arr,b,c);
printf("插入后的字符串为:%s\n",arr);
}
break;
case 3:
sum=Sumarr(arr);
printf("字符串长度为:%d\n",sum);
break;
case 4:
if(Huiarr(arr)==1)
printf("是回文串\n");
else
printf("不是回文串\n");
break;
case 5:
Backarr(arr);
printf("你要逆置的字符串为:%s\n",arr);
break;
case 6:
printf("请输入你要连接的字符串:\n");
scanf("%s",str);
strcat(arr,str);
printf("连接后的字符串为:%s\n",arr);
break;
case 7:
printf("即将退出系统!!!\n");
system("pause");
t=0;
break;
default:
printf("输入错误,重新输入!!\n");
}
}
return 0;
}
void Addarr(char *a,char b,int c)
{
int i;
int j=strlen(a);
for(i=j;i>=c;i--)
a[i+1]=a[i];
a[c]=b;
}
char *Delarr(char *a,char b)
{
int i,j=0;
for(i=0;a[i]!='\0';i++)
{
if(a[i]!=b)
{
a[j++]=a[i];
}
}
a[j]='\0';
return a;
}
char Sumarr(char *a)
{
int i;
for(i=0;a[i]!='\0';i++);
return i;
}
int Huiarr(char *a)
{
int len=strlen(a);
int i;
for(i=0;i<len/2;i++)
{
if(a[i]!=a[len-1-i])
return 0;
}
return 1;
}
void Backarr(char *a)
{
int len=strlen(a);
int i;
char t;
for(i=0;i<len/2;i++)
{
t=a[i];
a[i]=a[len-1-i];
a[len-i-1]=t;
}
}
void Menu()
{
printf("***************************\n");
printf("*****欢迎进入系统!!!*******\n");
printf("****1.字符串删减***********\n");
printf("****2.字符串增添***********\n");
printf("****3.字符串各元素统计个数*\n");
printf("****4.判断回文串***********\n");
printf("****5.逆置*****************\n");
printf("****6.字符串连接***********\n");
printf("****7.退出系统*************\n");
printf("***************************\n");
printf("***************************\n");
}

来活了!求优化一下,也可以多加一些关于字符串处理的函数(最好利用指针).
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 「已注销」 2023-05-17 17:24关注
参考GPT和自己的思路:好的,我会尽力回答你的问题。根据你给出的代码,我看到你已经定义了一些字符串处理的函数,如增删查改等。如果你要优化这个代码,可以考虑改进这些函数的实现方式,使其更高效、更易读。此外,你还可以添加一些新的字符串处理函数,例如:
字符串比较函数:比较两个字符串是否相同,输出相同返回真,否则返回假。
字符串查找函数:在一个字符串中查找某个子串,并返回其位置,如果不存在则返回-1。
字符串替换函数:在一个字符串中将某个子串替换为另一个子串。
以上三个函数都可以利用指针实现,可以更高效地处理字符串。
另外,建议在输入用户名密码时使用fgets函数代替gets函数,以避免缓冲区溢出的问题。也可以在选择功能号时,添加输入限制,如只允许输入数字等,以提高程序的健壮性。
解决 无用评论 打赏 举报