一:通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔,请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’,并将子串存储。
如果输入”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();
}