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

去掉字符串中重复的字符 — 华为笔试题

2017年12月12日 ⁄ 综合 ⁄ 共 747字 ⁄ 字号 评论关闭

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

解决代码如下:

// strip.c

#include <stdio.h>
#include <string.h>

#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<i; j++)
        {
            if(p[j] == str[i])
            {
                str[i] = REDUNDANT;
                break;
            }
        }
    }

/*
** locate the first redundant letter and
** the first common letter after it.
*/
    int redun = 0, common = 0;
    for(i=1; str[i] != '\0'; i++)
    {
        if(str[i] != REDUNDANT)
            continue;

        redun = i;
        while(str[i] == REDUNDANT)
            i++;

        common = i;
        break;
    }

    // no repeat letter
    if(redun == 0)
        return;

/*
** move all common letters forward
*/
    while(str[common] != '\0')
    {
        if(str[common] == REDUNDANT)
        {
            common++;
            continue;
        }
        str[redun++] = str[common];
        str[common++] = REDUNDANT;
    }

    str[redun] = '\0';
}


int main(void)
{
    char buf[64];
    fgets(buf, 64, stdin);

    strip(buf);
    printf("%s", buf);

    return 0;
}

抱歉!评论已关闭.