注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 获取当前页面路径,实现权..
 帮助

关于字符串的经典问题


2008-03-28 10:23:41
 标签:字符串   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://bluefish.blog.51cto.com/214870/68535
    同样是出自《程序员面试攻略》的几个经典问题,是关于字符串的。
    问题1:编写一个高效函数,从一个字符串中删除一些字符(这些要删除的字符组成一个小字符串,它包含的任何字符都要从原字符串中删除)。
    [分析:利用一个数组,该数组的下标为字符的ASCII值,来存储字符的状态,如果是要被删除的字符,则相应的数组元素置为true。然后通过遍历这个原字符串,对其中的每个字符检查其对应数组元素的状态。此处状态数组可理解为一种hash关系]
void RemoveChars(char * str, char * remove)
{
    int len = strlen(remove);
    int i = 0, pos = 0;
 
    for(i = 0; i < len; i++)
    {
        flags[(int)remove[i]] = true;
    }
    i = 0;
    len = strlen(str);
    while(i < len)
    {
        if(!flags[(int)str[i]])
        {
             str[pos++] = str[i];
        }
        i++;
    }
}
 
    问题2:编写一个函数,反转一个字符串中单词的顺序。“hello world!”-->“world!hello”
    [分析:大体思路为先将待处理字符串整体反转,意思为最后一个字符与第一个字符互换,依次类推。然后在从头查找每一个单词,对每个单词进行反转操作]
void ReverseString(char str[], int start, int end)
{
    char temp;
    while(end > start)
    {
        temp = str[start];
        str[start] = str[end;
        str[end] = temp;
  
        start++;
        end--;
    }
}
 
void ReverseWords(char str[])
{
    int start = 0, end = 0, length;
    length = strlen(str);
 
    ReverseString(str, start, length-1);
 
    while( end < length)
    {
        if(str[end] != ' ')
        {
            start = end;
            while(end < length && str[end] != ' ')
            {
                 end++;
            }
   
            end--;
            ReverseString(str, start, end);
        }
        end++;
    }
}

本文出自 “bluefish” 博客,请务必保留此出处http://bluefish.blog.51cto.com/214870/68535





    文章评论
 
2008-03-28 10:24:32
很好的 不错

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: