33

问答题 33 /49

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);

参考答案

#include <iostream>
#include <cassert>

using namespace std;

bool g_flag[26];
void stringFilter( const char *pInputStr, long lInputLen, char *pOutputStr )
{
    assert( pInputStr != NULL );
    int i = 0;
    if ( pInputStr == NULL || lInputLen <= 1 )
    {
        return;
    }
    const char *p = pInputStr;
    while ( *p != '\0' )
    {
    if ( g_flag[(*p - 'a')] )
    {
        p++;
    }else{
        pOutputStr[i++]		= *p;
        g_flag[*p - 'a']	= 1;
        p++;
         }
    }
    pOutputStr[i] = '\0';
}
int main()
{
    memset( g_flag, 0, sizeof(g_flag) );
    char	input[] = "abacacde";
    char	*output = new char[strlen( input ) + 1];
    stringFilter( input, strlen( input ), output );
    cout << output << endl;
    delete output;
    return(0);
}