Hzu挑战自我


私信TA

用户名:gxhzxyjsj

访问量:98830

签 名:

2024终究会过去,期待2025!

等  级
排  名 8
经  验 27865
参赛次数 67
文章发表 157
年  龄 0
在职情况 教师
学  校 贺州学院
专  业 软件工程

  自我简介:

弱鸡一个,继续努力!

解题思路:

    有同学说C++看不懂,所以来一个用C语言写的程序,不过因为测试数据的问题,导致用C语言写要注意很多问题。特别是输入命令那里,我也错了很多发。通过跟大佬一起慢慢分析,找可能出现的错误。最后才找到。大家可以参考一下源程序。

注意事项:

参考代码:

#include <stdio.h>
#include <string.h>
int main()
{
    char s[50];
    char order,c1,c2;
    int i=0,j,len;
    int pos=-1;  //位置或者标志
    s[i]=getchar();
	while(s[i]!='.') //s[i]不等于.则继续输入
	{
		i++;
		s[i]=getchar();
	}
	s[++i]='\0'; //加上字符串的结束标志
	len=i; //len保存字符串长度
	scanf("%c",&order); //输入命令
	while(order=='\n'|| order==' ') //如果命令是空格或者回车,继续读,直到不是为止。 注意这里,测试数据有坑
		scanf("%c",&order);
    if(order=='D')  //删除操作
    { 
		scanf(" %c",&c1);  //输入要删除的字符,注意%c前面有一个空格分隔 		
        for(i=0;s[i];i++)   //删除操作
            if(s[i]==c1)   //找到则删除它
            {
                pos=1;  //标志设置为1,表示操作成功 
                for(j=i;s[j];j++) //前移一个位置,覆盖即可删除。
                    s[j]=s[j+1];
                break;
            }
    }
    else if(order=='I') //插入操作
    {
		scanf(" %c %c",&c1,&c2);  //其中c1表示插入到指定字符前面,c2表示将要插入的字符
		//注意每一个%c前面都有一个空格分隔
		for(i=len-1;i>=0;i--) //找插入位置,从后面往前面查找,找到则记录位置并退出 
            if(s[i]==c1) 
			{
				pos=i; //记录插入位置 
				break;
			}			
        if(pos!=-1)  //找到了插入位置
        {
            for(i=len;i>=pos;i--) //后移一个位置,腾出位置插入,包括字符串结束标志也往后移动 
                s[i+1]=s[i];
            s[pos]=c2;
        }
    }
    else if(order=='R') //替换操作
    {
        scanf(" %c %c",&c1,&c2); //其中c1为被替换的字符,c2为替换的字符
        //注意每一个%c前面都有一个空格分隔        
		for(i=0;s[i];i++)
            if(s[i]==c1)  //找到则替换,注意时全部替换
            {
                pos=1;
                s[i]=c2;
            }
    }
    if(pos==-1) //操作不成功
        puts("no exist");
    else   //操作成功,则输出新字符串
        puts(s);
    return 0;
}


 

0.0分

6 人评分

  评论区

  • «
  • »