華為2014校園招聘的機(jī)試題目和2013年的完全一樣。
一、題目描述(60分):
通過鍵盤輸入一串小寫字母(a~z)組成的字符串。請編寫一個(gè)字符串過濾程序,若字符串中出現(xiàn)多個(gè)相同的字符,將非首次出現(xiàn)的字符過濾掉。
比如字符串“abacacde”過濾結(jié)果為“abcde”。
要求實(shí)現(xiàn)函數(shù):void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
【輸入】 pInputStr:? 輸入字符串
????????? ? lInputLen:? 輸入字符串長度????????
【輸出】 pOutputStr: 輸出字符串,空間已經(jīng)開辟好,與輸入字符串等長;?
【注意】只需要完成該函數(shù)功能算法,中間不需要有任何IO的輸入輸出
示例
輸入:“deefd”??????? 輸出:“def”
輸入:“afafafaf”???? 輸出:“af”
輸入:“pppppppp”???? 輸出:“p”
main函數(shù)已經(jīng)隱藏,這里保留給用戶的測試入口,在這里測試你的實(shí)現(xiàn)函數(shù),可以調(diào)用printf打印輸出
當(dāng)前你可以使用其他方法測試,只要保證最終程序能正確執(zhí)行即可,該函數(shù)實(shí)現(xiàn)可以任意修改,但是不要改變函數(shù)原型。一定要保證編譯運(yùn)行不受影響。
?
二、題目描述(40分):
通過鍵盤輸入一串小寫字母(a~z)組成的字符串。請編寫一個(gè)字符串壓縮程序,將字符串中連續(xù)出席的重復(fù)字母進(jìn)行壓縮,并輸出壓縮后的字符串。
壓縮規(guī)則:
1、僅壓縮連續(xù)重復(fù)出現(xiàn)的字符。比如字符串"abcbc"由于無連續(xù)重復(fù)字符,壓縮后的字符串還是"abcbc"。
2、壓縮字段的格式為"字符重復(fù)的次數(shù)+字符"。例如:字符串"xxxyyyyyyz"壓縮后就成為"3x6yz"。
要求實(shí)現(xiàn)函數(shù):
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
【輸入】 pInputStr:? 輸入字符串
??????????? lInputLen:? 輸入字符串長度
【輸出】 pOutputStr: 輸出字符串,空間已經(jīng)開辟好,與輸入字符串等長;
【注意】只需要完成該函數(shù)功能算法,中間不需要有任何IO的輸入輸出
示例
輸入:“cccddecc”?? 輸出:“3c2de2c”
輸入:“adef”???? 輸出:“adef”
輸入:“pppppppp” 輸出:“8p”
三、題目描述(50分):
通過鍵盤輸入100以內(nèi)正整數(shù)的加、減運(yùn)算式,請編寫一個(gè)程序輸出運(yùn)算結(jié)果字符串。
輸入字符串的格式為:“操作數(shù)1 運(yùn)算符 操作數(shù)2”,“操作數(shù)”與“運(yùn)算符”之間以一個(gè)空格隔開。
補(bǔ)充說明:
1、操作數(shù)為正整數(shù),不需要考慮計(jì)算結(jié)果溢出的情況。
2、若輸入算式格式錯(cuò)誤,輸出結(jié)果為“0”。
要求實(shí)現(xiàn)函數(shù):
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);
【輸入】 pInputStr:? 輸入字符串
????????????lInputLen:? 輸入字符串長度????????
【輸出】 pOutputStr: 輸出字符串,空間已經(jīng)開辟好,與輸入字符串等長;?
【注意】只需要完成該函數(shù)功能算法,中間不需要有任何IO的輸入輸出
示例
輸入:“4 + 7”? 輸出:“11”
輸入:“4 - 7”? 輸出:“-3”
輸入:“9 ++ 7”? 輸出:“0” 注:格式錯(cuò)誤
#include<stdio.h>
#include<string.h>
#include<stdlib.h>#define MAXCHAR 256void stringFilter(const char* pInputStr , long lInputLen , char* pOutputStr)
{bool hash[26] = {0}; //統(tǒng)計(jì)字符是否出現(xiàn)int i , j;for(i = 0 , j = 0 ; i < lInputLen; ++i){if(false == hash[pInputStr[i] - 'a']) //該字符還木有出現(xiàn)過{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]) //統(tǒng)計(jì)字符串中每個(gè)字符后面連續(xù)出現(xiàn)的重復(fù)字母次數(shù)++num;elsebreak;}//forif(0 != num) //num可能是兩位或三位或更多位的整數(shù){memset(buffer , 0 , sizeof(buffer));itoa(num + 1 , buffer , 10); //將整數(shù)按10進(jìn)制轉(zhuǎn)換為字符串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) //空格數(shù)非法{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 //第一個(gè)操作數(shù)中有非法字符{pOutputStr[0] = '0';pOutputStr[1] = '\0';return ;}}for(j = i + 1 ; pInputStr[j] != ' ' ; ++j);if(1 != j - i - 1) //運(yùn)算符長度不合法{pOutputStr[0] = '0';pOutputStr[1] = '\0';return ;}else //操作符的長度為1{if('+' != pInputStr[i+1] && '-' != pInputStr[i+1]) //操作符號(hào)非法{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 //第二個(gè)操作數(shù)中有非法字符{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); //將整數(shù)按10進(jìn)制轉(zhuǎn)換為字符串strcpy(pOutputStr , buffer);}//esle}//else
}int main(void)
{printf(" -- 2014年華為校園招聘機(jī)試題 (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;
}
轉(zhuǎn)載請標(biāo)明出處,原文地址:http://blog.csdn.net/hackbuteer1/article/details/11132567
總結(jié)
以上是生活随笔為你收集整理的2014届华为校园招聘机试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。