Sakura_j_h_ 2023-05-17 17:22 采纳率: 25%
浏览 33

来活了!求优化一下,也可以多加一些关于字符串处理的函数(最好利用指针).


#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");
    
}
  • 写回答

4条回答 默认 最新

  • 「已注销」 2023-05-17 17:24
    关注

    参考GPT和自己的思路:好的,我会尽力回答你的问题。根据你给出的代码,我看到你已经定义了一些字符串处理的函数,如增删查改等。如果你要优化这个代码,可以考虑改进这些函数的实现方式,使其更高效、更易读。此外,你还可以添加一些新的字符串处理函数,例如:

    1. 字符串比较函数:比较两个字符串是否相同,输出相同返回真,否则返回假。

    2. 字符串查找函数:在一个字符串中查找某个子串,并返回其位置,如果不存在则返回-1。

    3. 字符串替换函数:在一个字符串中将某个子串替换为另一个子串。

    以上三个函数都可以利用指针实现,可以更高效地处理字符串。

    另外,建议在输入用户名密码时使用fgets函数代替gets函数,以避免缓冲区溢出的问题。也可以在选择功能号时,添加输入限制,如只允许输入数字等,以提高程序的健壮性。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月17日