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

c++练习3 新浪面试题

2013年07月26日 ⁄ 综合 ⁄ 共 1710字 ⁄ 字号 评论关闭

新浪面试题:删除字符串中多余的空格

给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。

比如 “  I like     http://hi.baidu.com/mianshiti  ” 会变成 "I like http://hi.baidu.com/mianshiti"。

笔者有以下疑问,忘大师指点:若函数的参数是一个string类型怎么做?中途是否一定要通过字符数组来转换。

下面是我编写的程序:

#include <iostream>

using namespace std;

void removeExtraSpace(char*str)

{

    if (str ==NULL)

        return;

    char *p =str;

    boolafter_char_space = false; //是否字符之后的空格

    int neworder= 0;

    while(*p !=NULL)

    {

        if(*p!=' ') //不为空

        {

            str[neworder++] = *p;

            after_char_space = true;

        }

        else if(after_char_space) //字符后的空

        {

            str[neworder++] = *p;

            after_char_space = false;

        }

        p++;

    }

    if(str[neworder-1]== ' ')

        str[neworder-1] = '\0';

    else

        str[neworder] = '\0';

}

 

int main()

{

    char str[] ="      I like    liuxi  ";

    removeExtraSpace(str);

    cout<<"变化后为"<<str<<"测试最后的空格是否删除"<<endl;

    system("pause");

    return 0;

}

其他一些程序参考,思路类似

voidremoveExtraSpace(char* str)

{

    bool keep_space = false;

    int new_str_end = 0;

 

    for (int i = 0; str[i]; ++i)

    {

        if (str[i] != ' ')

        {

            str[new_str_end++] = str[i];

            keep_space = true;

        } else if (keep_space)

        {

            str[new_str_end++] = str[i];

            keep_space = false;

        }

    }

 

    if (new_str_end > 0 &&str[new_str_end - 1] == ' ')

    {

        str[new_str_end - 1] = '\0';

    } else

    {

        str[new_str_end] = '\0';

    }

}

voidremoveExtraSpace(char *str)

{

    char *head;

    int count=0,p=0,len = strlen(str);

    head = str;

    while(*str)

    {

        if(count>0 && count<len-1)

        {

            if(*str != ' ')

            {

                head[p] = *str;

                p++;

            }

            if(*str == ' ' && *(str+1)!= ' ')

            {

                head[p] = *str;

                p++;

            }

        }

        str++;

        count++;

 

    }

    head[p]='\0';

}

抱歉!评论已关闭.