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”

void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr)
{
	char a[26] = {0};
	while(*pInputStr)
		{	
			a[*pInputStr-'a'] += 1;
			if(a[*pInputStr - 'a'] <= 1)
			{
				*pOutputStr++ = *pInputStr;
			}
			*pInputStr++;
		}
}

題目描述(40分):
通過鍵盤輸入一串小寫字母(a~z)組成的字符串。請編寫一個字符串壓縮程序,將字符串中連續出席的重複字母進行壓縮,並輸出壓縮後的字符串。a
壓縮規則:
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”

void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{
		char temp;
		int number = 1;
		char buttfer[30] = {'\0'};
		while(*pInputStr)
		{	
			temp = *pInputStr++;
			number = 1;
			while(*pInputStr == temp)
			{
				number++;
				pInputStr++;
			}
			if(number >= 2)
			{	
				itoa(number,buttfer,10);
				strcat(pOutputStr, buttfer);
				pOutputStr = pOutputStr + strlen(buttfer);
			}
			*pOutputStr++ = temp;
		}
		*pOutputStr = '\0';
}

 

題目描述(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” 注:格式錯誤

 void arithmetic(const char *pInputStr, int length, char * pOutputStr)
{
    int Num1 = 0, Num2 = 0, SUM, i, j, res = 0;
    char flag;
     /*sscanf() - 從一個字符串中讀進與指定格式相符的數據.
   函數原型:
   int sscanf(const char *buffer,const char *format,[argument ]...);
   buffer 存儲的數據
   format 格式控制字符串
   argument 選擇性設定字符串
   sscanf會從buffer裏讀進數據,依照argument的設定將數據寫回。
     頭文件:
   #include<stdio.h>
     返回值:
   成功則返回參數數目,失敗則返回0,錯誤原因存於errno中。*/
    res = sscanf(pInputStr, "%d %c %d", &Num1, &flag, &Num2);
    if(res < 3 || (flag != '+' && flag != '-'))
     {
         strcpy(pOutputStr, "0");
         return;
     }
    printf("%d %c %d \n", Num1, flag, Num2);
    if(flag == '+')
         SUM = Num1 + Num2;
     else
         SUM = Num1 - Num2;
     /* 函數原型:
      char *itoa(int value, char *string, int radix);
     int value 被轉換的整數,char *string 轉換後儲存的字符數組,int radix 轉換進制數,如2,8,10,16 進制等
     頭文件: 
      <stdlib.h>*/
     itoa(SUM, pOutputStr, 10);
         
 }


第三題源代碼複製於:http://www.cnblogs.com/bigrabbit/archive/2012/09/12.html

測試用的主函數:

#include <stdio.h>
#include <memory.h>
#include <string.h>
#include <stdlib.h>
void main()
{
    /* TODO: 請測試時改變改用例 */
	char pInputStr1[] = {"aaaababbbcccdde"};
	char pInputStr2[] = {"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbddde"};
	char pInputStr3[] = {"2 + 5"};
    char pOutputStr1[MAXCHAR] = {0};
	char pOutputStr2[MAXCHAR] = {0};
	char pOutputStr3[MAXCHAR] = {0};

    /* TODO: 調用被測函數 */
	stringFilter(pInputStr1, strlen(pInputStr1), pOutputStr1);
    stringZip(pInputStr2, strlen(pInputStr2), pOutputStr2);
	arithmetic(pInputStr3, strlen(pInputStr3), pOutputStr3);

    /* TODO: 執行完成後可比較是否是你認爲正確的值 */
    printf(pOutputStr1); //abcde
	printf(pOutputStr2); //3a3b3c2de
	printf(pOutputStr3); //7
    return;
}




 

發佈了22 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章