[转]去掉字符串中重复的字符 --- 华为笔试题

转载:http://blog.csdn.net/vincent040/article/details/6902631

题目如题所示,将 “google” 弄成“gole”

// strip.c  

#include   
#include   

#define REDUNDANT -1  

void strip(char *str)  
{  
    if(str == NULL)  
        return;  
    
    int i, j;  
    char *p = str;  
    
    // mark all redundant letters  
    for(i=1; str[i] != '\0'; i++)  
    {  
        for(j=0; j

/*这个是我自己实现的,不过标记那部分,还是林老师的比较精辟点*/

#include 

#define FLAG -1

void strip(char *buf)
{
	int i = 0;
	int j = 0;
	int temp = 0;
	
	if (buf == NULL)
		return;
	
	/*标记重复字符*/
	/*
	for (i=0; buf[i] != '\0'; i++)
	{
		for (j=0; buf[j] != '\0'; j++) 
		{
			if (i == j)
			{
				continue;
			}
			else
			{
				if ((buf[i] == buf[j]) && (buf[j] != FLAG))
				{
					buf[j] = FLAG;
				}	
			}
		}		
	}
	*/
	
        /*标记重复字符*/
	for(i=1; buf[i] != '\0'; i++)  
	{  
		for(j=0; j 填坑*/
	for (i=0; buf[i] != '\0'; i++) 
	{
		/*找坑*/
		if (buf[i] != FLAG)
		{
			continue;
		}
		
		/*保存现场*/
		temp = i;
		
		i++;
		
		/*找字符*/
		while (buf[i] == FLAG)
		{
			i++;	
		}
		
		/*开始填坑*/
		if (buf[i] != '\0')
		{
			buf[temp] = buf[i];
			buf[i] = FLAG;
		}
		else	/*提前退出填坑*/
		{
			buf[temp] = '\0';
			return;
		}
		
		/*恢复现场*/ 
		i = temp;
	}
	
	buf[temp+1] = '\0';
} 

int main(void)
{
	char buf[64] = {0};
	
	fgets(buf, 64, stdin);
	
	strip(buf);
	
	printf("%s\n", buf);
		
	return 0;
}


你可能感兴趣的:(C/C++)