解题思路:
有同学说C++看不懂,所以来一个用C语言写的程序,不过因为测试数据的问题,导致用C语言写要注意很多问题。特别是输入命令那里,我也错了很多发。通过跟大佬一起慢慢分析,找可能出现的错误。最后才找到。大家可以参考一下源程序。
注意事项:
参考代码:#include
#include
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;
}