歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

2013年華為校園招聘機試(未知)

一:通過鍵盤輸入任意一個字符串序列,字符串可能包含多個子串,子串以空格分隔,請編寫一個程序,自動分離出各個子串,並使用’,’將其分隔,並且在最後也補充一個’,’,並將子串存儲。

如果輸入”abc def ghi d”,結果將是abc,def,gh,i,d

要求實現函數

Void DivideString(const char *pInputStr,long IinputLen,char *pOutputStr);

輸入:pInputStr:輸入字符串

IinputLen:輸入字符串的長度

輸出:pOutputStr:輸出字符串,字符串已開辟好,與輸入字符串等長

注意:只需要完成該函數功能算法,中間不需要有任何IO的輸入輸出

解,首先去掉字符串前面開始的空格,然後遍歷字符串,遇到空格時,將標志設為真,先不處理,等下次時循環時,若標志為真,則在字符前加一,號即可

oid DivideString(const char *pInputStr,long IinputLen, char *OutputStr)
{
    int cnt=0,i=0;//計數
    bool flag=false;
    while(pInputStr[i]==' ')//去掉前面的空格
        i++;
    for(;i<IinputLen;i++)
    {
        if(pInputStr[i]==' ')
        {
            flag=true;
            continue;
        }
        if(flag)//如果flag為true,說明有空格,則將空格變成了,
        {
            flag=!flag;
            OutputStr[cnt++]=',';
        }
        OutputStr[cnt++]=pInputStr[i];
    }
    OutputStr[cnt]='\0';
}

二:將一個字符串中出現次數最少的字符刪掉,並保證刪除後的字符順序不變,如果出現次數最少的字符有多種,則這幾種字符都要刪除,該字符串長度不會超過20個字符。 例如:源字符串為“abcdd”,刪除後為“dd”

解:此題主要是內存移位操作

char *deleteMin(char *InputSrc,int ILen)
{
    int sz[26]={0};
    int min=20,i;//最小出現次數
    for(i=0;i<ILen;i++)
        ++sz[InputSrc[i]-'a'];
    for(i=0;i<26;i++)
        if(sz[i]<min&&sz[i]!=0)
            min=sz[i];
    for(int t=0;*(InputSrc+t);++t)
        if(sz[InputSrc[t]-'a']==min)
        {
            memcpy(InputSrc+t,InputSrc+t+1,ILen-t);
            --t;//因為跳過了一位
        }
    return InputSrc;
}

Copyright © Linux教程網 All Rights Reserved