中软国际机试题

题目:实现简单的输入编辑,录入正确的字符串,出现‘,’,表示连续撤销前面的输入;发现‘%’,表示放弃前面所有录入;生成最终结果。
样例输入: You areah$$ great!
样例输出: You are great!

题意分析:键盘录入一串字符,字符中出现字符‘’就前删多少个字符;

思路:本人菜鸟,只能先把问题想简单点。如果出现一个字符‘$’时,从该字符位置开始就后面一个字符循环的覆盖前面一个字符。

while(buff[i] != '\0')
{
    if(buff[i] == ‘$’)
    a[i-1] = a[i+1];//表达思路的伪代码,并不准确
}

后面出现的问题就来了,如果‘使strcat()’时就进行处理,
1.‘’在当前字符串的pos下标(位置),同时可以判断‘num>=12.’字符连续出现的个数num>pos时;直白点就是前面的字符就不够删,
3.字符拼接;活用自定义变量,定义char buff2[1024] ;用来保存阶段的之前的字符,再定义char buff3[1024];
用来保存‘使strcatbuff’的出现,
因为字符出现的‘使buff’了。
中软国际机试题_第1张图片

下面先看下递归函数fun(char buff[],int length);

void fun(char buff[],int length)
{
    char buff2[1024] = "";
//初始化\0
    char buff3[1024] = "";
    int i = 0,flag = 0, j = 0,k = 0;//flag 记录是不是有$出现
    int pos= 0;//记录第一个$的下标
    int num = 1;//记录$的个数
    int del = 0;//移动的字节个数
    int pos2 = 0;//判断是否超过删除的个数
    int length2 = 0;//记录前面字符串的长度
    for(i = 0;iif(buff[i] == '$')
        {
            pos = i;
            flag = 1;
        }
    }
    if(flag == 0)
        return ;        //递归出口:整个字符串中不含有$
    for(i = pos;iif(buff[i+1]=='$')
            num++;      //计算连续$出现的个数;
        else    break;
    }
    for(i = 0;i<=pos;i++)
    {
        buff2[i] = buff[i];//出现$之前的字符
    }
    for(i = pos+num;i//buff3表示$出现之后的字符
        j++;
    }
    length2 = strlen(buff2);
    if(num>length2)
        buff2[0] = '\0';
    else{
        buff2[length2-num-1] = '\0';
    }
    strcpy(buff,buff2);
    strcat(buff,buff3);
    length = strlen(buff);
    fun(buff,length);
//直接就是对buff操作,因为是传递的是地址。
}

好的,祝愿自己后面早上的机试,面试顺利!

你可能感兴趣的:(笔试面试,C语言)