面试中遇到一题目:编写一字符串功能函数(要求算法尽量精简,程序运行率高)
编写一字符串功能函数:编写一函数,使其有以下功能:将字符串中 '* '排列到字符串前,其他字符顺序不变存储,并返回字符串中 '* '的个数;例如:字符串:DAi**d9*fFEA56**AD,排序后,字符串成为:*****DAid9fFEA56AD,并返回5.
int thanks(char *str)
{
请高手...谢谢
[解决办法]
#include <iostream>
#include <string>
using namespace std;
void main()
{
string str;
cin> > str;
int count=0;
for(int i=str.length()-1;i> =0;i--)
{
if(str[i]== '* ')
count++;
else
str[i+count]=str[i];
}
for(i=0;i <=count-1;i++)
str[i]= '* ';
cout < <str < <endl;
}
[解决办法]
int thanks(char *str)
{
char *cur = str;
char tmp;
if(NULL == str)
{
return -1;
}
while(*str != '\0 ')
{
if( '* ' == *str)
{
if(cur == str)
{
str++;
cur = str;
}
else
{
tmp = *str;
*str = *cur;
*cur = tmp;
str = cur +1;
cur++;
}
}
else
{
str++;
}
}
return 0;
}
这个怎么样,实验过的了,完全正确.
[解决办法]
#include <iostream>
using namespace std;
int fun(char *);
void main()
{
char c[]= "***ab**cd**e*f*** ";
cout < <fun(c) < <endl;
}
int fun(char *str)//字符串指针
{
int charNumber=0;
int count=0,countCopy=count;
char *strFlag;
char *strCopy=str;
cout < <str < <endl;
while(*str!= '\0 ')
{
str++;
charNumber++;
if(*str== '* ')
count++;
}
countCopy=count;
str--;
strFlag=str;
count=0;
for(int j=charNumber-1;j> =0;j--)
{
if(*str== '* ')
count++;
else
for(int k=0;k <count;k++)
strFlag++;
*strFlag=*str;
str--;
strFlag=str;
}
for(int i=0;i <count;i++)
{
*str= '* ';
str++;
}
cout < <strCopy < <endl;
return countCopy;
}
应该还可以改进,自己搞一下吧