现在的位置: 首页 > 综合 > 正文

88.2005 年 11 月金山笔试题。编码完成下面的处理函数。

2018年01月20日 ⁄ 综合 ⁄ 共 742字 ⁄ 字号 评论关闭

88.2005  年 11  月金山笔试题。编码完成下面的处理函数。
函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先
后顺序,函数返回串中字符'*'的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,

函数并返回值为 5。(要求使用尽量少的时间和辅助空间)

/*
88.2005  年 11  月金山笔试题。编码完成下面的处理函数。
函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先
后顺序,函数返回串中字符'*'的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,
函数并返回值为 5。(要求使用尽量少的时间和辅助空间)

与快速排序的partition原理差不多 
*/
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;

void swap(char A[],int a,int b)  
{  
    char temp=A[a];  
    A[a]=A[b];  
    A[b]=temp;  
}  

int partiStr(char str[])
{
	int len,i,k,sum;
	len=strlen(str);
	k=-1;
	sum=0;
	for(i=0;i<len;i++)
	{
		if(str[i]=='*')
		{
			k++;
			sum++;
			swap(str,k,i);
		}
	}
	return sum;
} 

int main()
{
	char a[]={"ab**cd**e*12"};
	char b[sizeof(a)];
	int num;
	printf("%s",a);
	num=partiStr(a);
	printf("处理后为:%s *的个数为:%d\n",a,num);
	
	return 0;
} 

抱歉!评论已关闭.