华为机试4
一:通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔,请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’,并将子串存储。
如果输入”abc def ghi d”,结果将是abc,def,gh,i,d,
要求实现函数
Void DivideString(const char *pInputStr,long IinputLen,char *pOutputStr);
输入:pInputStr:输入字符串
IinputLen:输入字符串的长度
输出:pOutputStr:输出字符串,字符串已开辟好,与输入字符串等长
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出
#include <iostream> using namespace std; void DivideString(const char *pInputStr,long IinputLen, char *OutputStr) { bool flag = false; int j=0; int i=0; while(pInputStr[i] == ' ') i++; for (i;i<IinputLen;i++) { if(pInputStr[i]==' ') { flag = true; } else { if(flag) { OutputStr[j] = ','; j++; } OutputStr[j] = pInputStr[i]; j++; flag = false; } } OutputStr[j] = ','; OutputStr[++j] = '\0'; } int main() { char Indata[] = " 45456 fadf fdsafdsa"; char OutData [100] = {'0'}; DivideString(Indata,strlen(Indata),OutData); cout<<OutData<<endl; getchar(); return 0; }
三:将一个字符串中出现次数最少的字符删掉,并保证删除后的字符顺序不变,如果出现次数最少的字符有多种,则这几种字符都要删除,该字符串长度不会超过20个字符。 例如:源字符串为“abcdd”,删除后为“dd”
#include <iostream> #include <map> #include <string> using namespace std; char *deleteMin(char *InputSrc,int ILen) { int sz[26]={0}; int min=20; int 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; } char *DeleteMin(char *InputSrc,int ILen) { map <char,int> MapChar; char OutPutSrc [100] = {0}; int nMin = 20; for(int i = 0;i<ILen;i++) { if(MapChar.find(InputSrc[i])==MapChar.end()) { MapChar[InputSrc[i]] = 1; continue; } MapChar[InputSrc[i]]++; } map <char,int>::iterator itr = MapChar.begin(); for(itr;itr!=MapChar.end();itr++) { int nCount = itr->second; if( nCount < nMin) nMin = nCount; } int j = 0; for(int i = 0;i<ILen;i++) { char data = InputSrc[i]; if(MapChar[data] == nMin) continue; OutPutSrc[j] = InputSrc[i]; j++; } strcpy(InputSrc,OutPutSrc); return InputSrc; } int main() { char data [] ="11,,5489aabbccddd"; DeleteMin(data,strlen(data)); cout<<data<<endl; getchar(); }