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