華為2014校園招聘的機試題目和2013年的完全一樣。
一、題目描述(60分):
通過鍵盤輸入一串小寫字母(a~z)組成的字符串。請編寫一個字符串過濾程序,若字符串中出現多個相同的字符,將非首次出現的字符過濾掉。
比如字符串“abacacde”過濾結果為“abcde”。
要求實現函數:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
【輸入】 pInputStr:? 輸入字符串
????????? ? lInputLen:? 輸入字符串長度????????
【輸出】 pOutputStr: 輸出字符串,空間已經開辟好,與輸入字符串等長;?
【注意】只需要完成該函數功能算法,中間不需要有任何IO的輸入輸出
示例
輸入:“deefd”??????? 輸出:“def”
輸入:“afafafaf”???? 輸出:“af”
輸入:“pppppppp”???? 輸出:“p”
main函數已經隱藏,這里保留給用戶的測試入口,在這里測試你的實現函數,可以調用printf打印輸出
當前你可以使用其他方法測試,只要保證最終程序能正確執行即可,該函數實現可以任意修改,但是不要改變函數原型。一定要保證編譯運行不受影響。
?
二、題目描述(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”
三、題目描述(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” 注:格式錯誤
#include<stdio.h>
#include<string.h>
#include<stdlib.h>#define MAXCHAR 256void stringFilter(const char* pInputStr , long lInputLen , char* pOutputStr)
{bool hash[26] = {0}; //統計字符是否出現int i , j;for(i = 0 , j = 0 ; i < lInputLen; ++i){if(false == hash[pInputStr[i] - 'a']) //該字符還木有出現過{hash[pInputStr[i] - 'a'] = true;pOutputStr[j++] = pInputStr[i];}}pOutputStr[j] = '\0';
}void stringZip(const char* pInputStr , long lInputLen , char* pOutputStr)
{int i , j , k , num;char buffer[20];for(i = 0 , k = 0; i < lInputLen; ){num = 0;for(j = i + 1 ; j < lInputLen ; ++j){if(pInputStr[i] == pInputStr[j]) //統計字符串中每個字符后面連續出現的重復字母次數++num;elsebreak;}//forif(0 != num) //num可能是兩位或三位或更多位的整數{memset(buffer , 0 , sizeof(buffer));itoa(num + 1 , buffer , 10); //將整數按10進制轉換為字符串strcpy(pOutputStr + k , buffer);k += strlen(buffer);}pOutputStr[k++] = pInputStr[i];i = i + num + 1;}//forpOutputStr[k] = '\0';
}void arithmetic(const char* pInputStr , long lInputLen , char* pOutputStr)
{int i , j , num1 , num2 , result , num_space;char buffer[4];bool add , sub;add = sub = false;for(i = 0 , num_space = 0 ; i < lInputLen ; ++i){if(pInputStr[i] == ' ')++num_space;}if(2 != num_space) //空格數非法{pOutputStr[0] = '0';pOutputStr[1] = '\0';return ;}num1 = num2 = 0;for(i = 0 ; pInputStr[i] != ' ' ; ++i){if(pInputStr[i] >= '0' && pInputStr[i] <= '9')num1 = num1 * 10 + pInputStr[i] - '0';else //第一個操作數中有非法字符{pOutputStr[0] = '0';pOutputStr[1] = '\0';return ;}}for(j = i + 1 ; pInputStr[j] != ' ' ; ++j);if(1 != j - i - 1) //運算符長度不合法{pOutputStr[0] = '0';pOutputStr[1] = '\0';return ;}else //操作符的長度為1{if('+' != pInputStr[i+1] && '-' != pInputStr[i+1]) //操作符號非法{pOutputStr[0] = '0';pOutputStr[1] = '\0';return ;}else{if('+' == pInputStr[i+1])add = true;if('-' == pInputStr[i+1])sub = true;for(i = j + 1 ; i < lInputLen ; ++i){if(pInputStr[i] >= '0' && pInputStr[i] <= '9')num2 = num2 * 10 + pInputStr[i] - '0';else //第二個操作數中有非法字符{pOutputStr[0] = '0';pOutputStr[1] = '\0';return ;}}//forif(add)result = num1 + num2;else if(sub)result = num1 - num2;memset(buffer , 0 , sizeof(buffer));itoa(result , buffer , 10); //將整數按10進制轉換為字符串strcpy(pOutputStr , buffer);}//esle}//else
}int main(void)
{printf(" -- 2014年華為校園招聘機試題 (http://blog.csdn.net/hackbuteer1) --\n\n");char pInputStr1[] = {"aaabbbcccdde"};char pInputStr2[] = {"aaaaaaaaaaaabbcddddddddddddddddde"};char pInputStr3[] = {"3 + 4"};char pOutputStr1[MAXCHAR] = {0};char pOutputStr2[MAXCHAR] = {0};char pOutputStr3[MAXCHAR] = {0};stringFilter(pInputStr1 , strlen(pInputStr1) , pOutputStr1);stringZip(pInputStr2 , strlen(pInputStr2) , pOutputStr2);arithmetic(pInputStr3 , strlen(pInputStr3) , pOutputStr3);puts(pOutputStr1);puts(pOutputStr2);puts(pOutputStr3);return 0;
}
轉載請標明出處,原文地址:http://blog.csdn.net/hackbuteer1/article/details/11132567
總結
以上是生活随笔為你收集整理的2014届华为校园招聘机试题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。