zoukankan      html  css  js  c++  java
  • 华为机试

    来源:http://blog.csdn.net/mishifangxiangdefeng/article/details/7947546

    一、题目描述(60分):
    通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
    比如字符串“abacacde”过滤结果为“abcde”。


    要求实现函数: 
    void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);


    【输入】 pInputStr:  输入字符串
             lInputLen:  输入字符串长度         
    【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;


    【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出


    示例 
    输入:“deefd”        输出:“def”
    输入:“afafafaf”     输出:“af”

    输入:“pppppppp”     输出:“p”

    1. void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr)  
    2. {  
    3.     bool flag[26] = {0};  
    4.     int i, j = 0;  
    5.     for(i = 0; i < lInputLen; i++)  
    6.     {  
    7.         char t = pInputStr[i];  
    8.         if(flag[t-'a'] == 0)  
    9.         {  
    10.             pOutputStr[j] = t;  
    11.             j++;  
    12.             flag[t-'a'] = 1;  
    13.         }  
    14.     }  
    15.     pOutputStr[j] = '\0';  
    16. }  


    二、题目描述(40分):
    通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
    压缩规则:
    1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".
    2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"


    要求实现函数: 
    void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);


    【输入】 pInputStr:  输入字符串
             lInputLen:  输入字符串长度         
    【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;


    【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出


    示例 
    输入:“cccddecc”   输出:“3c2de2c”
    输入:“adef”     输出:“adef”
    输入:“pppppppp” 输出:“8p”

    1. void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)  
    2. {  
    3.     int num = 0, i, j = 0;  
    4.     for(i = 0; i <= lInputLen; i++)  
    5.     {  
    6.         if(i && pInputStr[i] != pInputStr[i-1])  
    7.         {  
    8.             if(num > 1){pOutputStr[j] = (char)(num+'0');j++;}  
    9.             pOutputStr[j] = pInputStr[i-1];j++;  
    10.             num = 1;  
    11.         }  
    12.         else  
    13.             num++;  
    14.     }  
    15.     pOutputStr[j] = '\0';  
    16. }  


    三、题目描述(50分): 
    通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
    输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。


    补充说明:
    1. 操作数为正整数,不需要考虑计算结果溢出的情况。
    2. 若输入算式格式错误,输出结果为“0”。


    要求实现函数: 
    void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);


    【输入】 pInputStr:  输入字符串
             lInputLen:  输入字符串长度         
    【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;


    【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出


    示例 
    输入:“4 + 7”  输出:“11”
    输入:“4 - 7”  输出:“-3”
    输入:“9 ++ 7”  输出:“0” 注:格式错误

    1. void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr)  
    2. {  
    3.     char ch[3][1000];  
    4.     int i, j = 0, k =0, a = 0, b = 0, ret = -1;  
    5.     for(i = 0; i <= lInputLen; i++)  
    6.     {  
    7.         if(pInputStr[i] == ' ' || pInputStr[i] == '\0')  
    8.         {  
    9.             ch[j][k] = '\0';  
    10.             j++;k = 0;  
    11.         }  
    12.         else  
    13.         {  
    14.             ch[j][k] = pInputStr[i];  
    15.             k++;  
    16.         }  
    17.     }  
    18.     for(i = 0; ch[0][i] != '\0'; i++)  
    19.     {  
    20.         if(ch[0][i] < '0' || ch[0][i] > '9')  
    21.         {  
    22.             ret = 0;  
    23.             break;  
    24.         }  
    25.         a = a * 10 + ch[0][i] - '0';  
    26.     }  
    27.     for(i = 0; ch[2][i] != '\0'; i++)  
    28.     {  
    29.         if(ch[2][i] < '0' || ch[2][i] > '9')  
    30.         {  
    31.             ret = 0;  
    32.             break;  
    33.         }  
    34.         b = b * 10 + ch[2][i] - '0';  
    35.     }  
    36.     if(ch[1][1] != '\0' || (ch[1][0] != '+' && ch[1][0] != '-'))  
    37.         ret = 0;  
    38.     if(ret == 0)  
    39.     {  
    40.         pOutputStr[0] = '0';  
    41.         pOutputStr[1] = '\0';  
    42.         return ;  
    43.     }  
    44.     if(ch[1][0] == '+')ret = a + b;  
    45.     else if(ch[1][0] == '-')ret = a - b;  
    46.     if(ret == 0)  
    47.     {  
    48.         pOutputStr[0] = '0';  
    49.         pOutputStr[1] = '\0';  
    50.         return ;  
    51.     }  
    52.     k = 0;  
    53.     char temp[1000];  
    54.     int t = ret;  
    55.     j = 0;  
    56.     if(ret < 0)  
    57.     {  
    58.         pOutputStr[0] = '-';j++;  
    59.         t = -t;  
    60.     }  
    61.     while(t)  
    62.     {  
    63.         temp[k] = (char)(t % 10 + '0');  
    64.         t = t / 10;  
    65.         k++;  
    66.     }  
    67.     for(i = k - 1; i >= 0; i--)  
    68.     {  
    69.         pOutputStr[j] = temp[i];  
    70.         j++;  
    71.     }  
    72.     pOutputStr[j] = '\0';  
    73. }  

    对字符串的库函数不熟,写复杂了

    测试:

      1. int main()  
      2. {  
      3.     char a[10], b[10];  
      4.     while(cin.getline(a, 10, '\n'))  
      5.     {  
      6.         stringFilter(a, strlen(a), b);  
      7. //      stringZip(a, strlen(a), b);  
      8. //      arithmetic(a, strlen(a), b);  
      9.         cout<<b<<endl;  
      10.     }  
      11.     return 0;  


    微信公众号: 猿人谷
    如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
    如果您希望与我交流互动,欢迎关注微信公众号
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

  • 相关阅读:
    第二阶段冲刺7
    第二阶段冲刺6
    课后作业02需求分析
    阅读计划
    个人总结
    第十六周学习进度条
    第十五周学习进度条
    《梦断代码》阅读笔记03
    《梦断代码》阅读笔记02
    《梦断代码》阅读笔记01
  • 原文地址:https://www.cnblogs.com/heyonggang/p/2986894.html
Copyright © 2011-2022 走看看