碧海蓝天

茶米油盐
随笔 - 2, 文章 - 0, 评论 - 0, 引用 - 0
数据加载中……

c 和 c++的字符串

c的字符串可以看成是一个以'\0'结尾的字符数组, 字符串的名字其实就是指向这个数组的首地址。 几乎所有的字串操作函数都是通过指针和'\0'结尾来处理c字符串的。 这样做的好处就是效率非常高,自由度非常高; 坏处就是安全性问题了,还有就是给人一种冲动,什么处理都想自己动手实现, 这样往往给我们的代码留下很多的隐患。 
c++给我提供了一个string的类型,其实他的内部实现是basic_char模板类, 用c++处理字符串string给我们提供了很多的接口,几乎可以是实现字符串处理的全部要求。 对于我这样原来一直都使用C语言且水平又不高的人来说,刚进入c++总是有一些不习惯。 不过就如很多书上说的一样,c++能够提高开发效率(相较于c语言),不过无论学习什么都是需要学习成本的, 比如你开始使用c++的时候比起你熟悉的c语言可能效率会低,不过当你熟练掌握c++的时候,就是你收获的季节了。下面是一个使用c++ string的例子,删除一个字符串多余的空格(最前面,最后面的空格全部删除,中间有连续空格的地方只留下一个)
#include <string>
#include 
<fstream>
#include 
<iostream>
#include 
<cstring>
using namespace std;

void delOverSpace(string &h)
{
    unsigned 
int n = 0;
    unsigned 
int i = 0;
    unsigned 
int j = 0;

    
while ( (n = h.find_first_of(' '0)) != string::npos && n == 0 )
        h.erase(n, 
1);

    
while ( (n = h.find_last_of(' ', h.size() - 1) ) != string::npos && n == h.size() - 1 )
        h.erase(n, 
1);
    

    
while ( (n = h.find_first_of(' ', i)) != string::npos) {
        j 
= n + 1;
        
while (  h.find_first_of(' ', j) == j )
            h.erase(j, 
1);
        i 
= j;
    }
}
int main()
{
    
string str;
    cout 
<< "input a line " << endl;
    
while (1) {
        cout 
<< ">>>>>>>>>>>>>>>";
        getline(cin, str);
        delOverSpace(str);
        cout 
<< str.size() << " charators of : "
            
<< str << endl;
        
if ( str.compare("quit"== 0 )
            
break;
    }
    
return 0;
}

刚开始写这样的代码的时候,要去看很长时间的c++ string 接口的手册, 而且心里肯定会嘀咕说,string::erase的效率肯定会很低, 我用c语言很快就能搞定什么的。 但是我们要告诫自己,使用成熟的库,是我们写出健壮的代码的重要武器。 而且c++的实现告诉我们,他几乎不会存在执行效率的问题。我们可以放心。

posted on 2010-09-12 11:38 周某人 阅读(388) 评论(0)  编辑 收藏 引用 所属分类: c/c++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理