`
cyw
  • 浏览: 33130 次
  • 来自: 广州
社区版块
存档分类
最新评论

C++STL泛型编程(一)——string

    博客分类:
  • STL
阅读更多

 2.2 string基本字符系列容器——>要包含string库“include<string>”
      相当于字符串类,亦可用vector<char>处理字符串,但功能比不上string,或者vector<string>,相当于c语言中的字符串数组。

 

 1.创建string对象
 类似于用普通数据类型,定义变量一般。
 创建字符串对象时,该字符串是个空字符串,其长度为0。如:
 
#include<string>
#include<iostream>
using namespace std;

int main()
{
 string s;
 cout << s.length() << endl ;
 return 0;
}

运行结果是:0

 

 2.两种方式给string对象赋值
 (1)用赋值号直接赋值
#include<string>
#include<iostream>
using namespace std;

int main()
{
 string s;
 s="Hello world!!!"; 
 cout << s << endl ;
 return 0;
}

运行结果:
Hello world!!!


 (2)更常用的方法是,把字符指针赋给一个字符串对象
#include<string>
#include<iostream>
using namespace std;

int main()
{
 string s;
 char ss[5000];
 //scanf的输入速度比cout快得多
 //scanf是C语言中的函数,所以不支持string对象
 scanf("%s",&ss);
 //将整个字符数组赋值给string对象
 s=ss;
 cout << s << endl ;
 return 0;
}

 

 3.从string对象尾部添加  字符(char),采用“+”操作即可。


 4.从string对象尾部追加字符串
 (1)直接运用“+”操作符
 (2)采用append()方法,是类之中的成员函数。<对象>.append(<追加的值参数>);
如:
#include<string>
#include<iostream>
using namespace std;

int main()
{

 string s;
 s="Hello";
 s=s+" ";
 s.append("world");
 s=s+"!!!";
 cout << s << endl;
 return 0;
}

 

 5.给string对象插入字符,可用insert()方法插到迭代器的位置之前,是类之中的成员函数。<对象>.insert(<位置参数>,<插入的值>);
如:
#include<string>
#include<iostream>
using namespace std;

int main()
{

 string s;
 s="Hello";
 s=s+" ";
 s.append("world");
 s=s+"!!!";
 string::iterator it; /*相当于指针,string之中属性的定义变量*/
 it = s.begin();
 s.insert(it+1,'3');
 cout << s << endl;
 return 0;
}

 

 6.运用下标方式随机访问string对象的元素,下标是从0开始计数的。另外,string对象的元素是一个个字符。此时相当于字符串数组。
如:
#include<string>
#include<iostream>
using namespace std;

int main()
{

 string s;
 s="Hello";
 s=s+" ";
 s.append("world");
 s=s+"!!!";
 string::iterator it; /*相当于指针,string之中属性的定义变量*/
 it = s.begin();
 s.insert(it+1,'3');
 cout << s << endl;
 cout << s[1] << endl ;
 return 0;
}

 

 7.删除string对象的元素
 (1)清空一个字符串,则直接给他赋空字符串即可;
 (2)使用erase()方法删除迭代器所指的那个元素或者一个区间中的所有元素。已对该函数进行过了重载,所以
<对象>.erase(<所要删除位置的元素的值>);或者<对象>.erase(<所要删除区间的起始元素的值>,<所要删除的元素的最后元素的后一个位置上的元素>);

如:
#include<string>
#include<iostream>
using namespace std;

int main()
{

 string s;
 s="Hello";
 s=s+" ";
 s.append("world");
 s=s+"!!!";
 string::iterator it; /*相当于指针,string之中属性的定义变量*/
 it = s.begin();
 s.insert(it+1,'3');
 cout << s << endl;
 cout << s[1] << endl ;
 s.erase(it+1);//相当于s.erase(it+1,it+2);
 cout << s << endl;
 s.erase(it+1,it+4);
 cout << s << endl;
 return 0;
}

 

 8.返回string对象的长度
 采用length()方法返回字符串的长度;
 采用empty()方法返回判断字符串是否为空的结果。(空为真,1;不空为假,0.)

 

 9.替换字符——>replace()方法,重载很多。
 <对象>.replace(<起始元素位置>,<从开始元素以后的所替换的元素个数>,<要执行的替换进去的字符串(个数可大可小,不限)>);

 

 10.搜索string对象的元素与子串,find()方法。
 采用find()方法可查找字符串中的第一个字符元素(char,用单引号界定)或者子串(用双引号界定,返回第一个元素的下标值),如果查到,这返回下标值(从0开始计数),如果查不到,则返回4294967295. 

 

 11.string对象的比较
 可用compare()方法与其他字符串相比较。
 若他比对方“大”,则返回1;
 若他比对方“小”,则返回-1;
 若他比对方“相等”,则返回0;

#include <string>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    string s;
    s = "cat dog cat";
    //s比“cat”字符串大,返回1
    cout << s.compare("cat") << endl ;
    //s比“cat dog cat”字符串相等,返回0
    cout << s.compare("cat dog cat") << endl ;
    //s比“dog”小返回-1
    cout << s.compare("dog") << endl ;
    return 0;
}

 

 12.用reverse反向排序string对象
 使用reverse反向排序算法,该函数包含于“#include<algorithm>”.

 reverse(v.begin(),v.end());//头指针到尾指针
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    string s;
    s = "123456789";
    reverse(s.begin(),s.end());
    cout << s << endl ;
    return 0;
}

 

 13.string对象可以作为vector向量的元素,类似于字符串数组。

 

 14.string类型的数字化处理
 在ACM竞赛中,常常需要将读入的数字的每位分离出来,若果采用取余的方法,花费的时间就会太久。
 相比,将读入的数据当成字符串来处理,较方便、省时。
 下面程序演示求一个整数各位的和。
#include<string>
#include<iostream>
using namespace std;

int main()
{
 string s;
 s = "123456789";
 int i;
 int sum = 0;
 for(i = 0;i<s.length();i++){
 
  if(s[i]=='0')sum+=0;
  else if(s[i]=='1')sum+=1;
  else if(s[i]=='2')sum+=2;
  else if(s[i]=='3')sum+=3;
  else if(s[i]=='4')sum+=4;
  else if(s[i]=='5')sum+=5;
  else if(s[i]=='6')sum+=6;
  else if(s[i]=='7')sum+=7;
  else if(s[i]=='8')sum+=8;
  else if(s[i]=='9')sum+=9;
 
 }
 cout << sum << endl ;
 return 0;
}


 15.string对象鱼字符串数组的相互操作
#include<string>
#include<iostream>
using namespace std;

int main()
{
 string s;
 char ss[100];
 //输入字符串到字符数组中
 scanf("%s",&ss);
 //字符数组赋值给字符串数组
 s=ss;
 //因为字符串数组不能使用scanf()和printf()函数
 //若要用printf输出字符串对象,要使用c_str()方法
 printf(s.c_str());
 cout << endl ;
 //用printf输出字符数组
 printf("%s",ss);
 cout << endl ;
 cout << s << endl ;
 cout << ss << endl ;
 return 0 ;
}

 

 16.string对象与sscanf函数
 在C语言中,sscanf函数可以把一个字符串按需要的方式分离出子串,甚至是数字。
#include<string>
#include<iostream>
using namespace std;

int main()
{
 string s1,s2,s3;
 char sa[100],sb[100],sc[100];

 //将字符串分离成子串,分隔符为空格
 sscanf("abc 123 pc","%s %s %s",sa,sb,sc);
 s1 = sa ;
 s2 = sb ;
 s3 = sc ;
 cout  << s1 << " " << s2 << " " << s3 << " " << endl ;

 //将字符串分离为数字,分隔符为空格 、“,”和“$”
 //当使用数字的时候,跟scanf一样,他要传指针地址
 int a,b,c,d;
 sscanf("3 4,5$6","%d %d,%d$%d",&a,&b,&c,&d);
 cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
 return 0;
}

 

 17.string对象与数值之间需要相互转换。
#include<string>
#include<iostream>
#include<sstream>
using namespace std;

//c++方法:将数值转换为string
string convertToString(double x)
{
 ostringstream o;
 if(o<<x)
  return o.str();
 return "conversion error";//if error
}

//c++方法:将string转换成数值
double convertFromString(const string &s)
{
 istringstream i(s);
 double x;
 if(i >> x)
  return x;
 return 0.0;//if error.
}

int main()
{
 //将数值转换为string的第一种方法:c方法
 char b[10];
 string a;
 sprintf(b,"%d,1975");
 a=b;
 cout << a << endl;

 //将数值转换为string的第二种方法:c++方法
 string cc = convertToString(1976);
 cout << cc << endl;

 //将string转换为数字的方法:c++方法
 string dd = "2006";
 int p=convertFromString(dd)+2;
 cout << p << endl ;

 return 0;
}

分享到:
评论

相关推荐

    stl泛型编程--视频教程,讲的比较细

    通过上述内容的学习,我们了解到STL泛型编程为C++开发提供了强大的工具箱。掌握STL不仅可以提高编程效率,还能帮助开发者写出更加优雅、高效的代码。未来随着C++语言的发展,STL还将不断进化和完善,为程序员带来更...

    三十分钟掌握STL(泛型编程)

    STL的核心优势在于其高度的通用性和效率,这些特性使得它成为现代C++编程不可或缺的一部分。 #### 数据结构与算法分离 STL的一个显著特点是实现了数据结构和算法的彻底分离。这意味着用户可以自由地选择不同的数据...

    c++系列-泛型编程与模板-源码

    在C++编程语言中,泛型编程和模板是两个核心概念,它们极大地提升了代码的复用性和灵活性。本文将深入探讨这两个主题,并结合源码分析,帮助你更好地理解和应用它们。 ## 泛型编程 泛型编程是C++中一种抽象编程的...

    C++ STL学习资料

    C++ STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它为程序员提供了高效且灵活...同时,理解并掌握STL的设计原则,如迭代器和泛型编程,将有助于你成为更优秀的C++开发者。

    C++泛型编程,学习总结方便回看!

    C++泛型编程,联系代码手稿。容器、模版、STL:string、vector、deque、stack、queue、list、map、set,函数对象:仿函数、谓词、常见库算法:遍历、查找、排序

    C++STL中文版.pdf

    本书《C++STL中文版》是专门针对C++STL的详细介绍和讨论。书中作者P.J.Plauger、Alexander A. Stepanov、Meng Lee和David R. Musser,都是在C++STL实现方面有着卓越贡献的专家。这本教科书详细地解说了STL的各个方面...

    【STL源代码】C++标准库STL源代码下载

    同时,也能让我们更好地掌握C++模板机制,以及如何利用泛型编程来编写高效且可复用的代码。通过分析源码,我们可以学习到如何平衡空间和时间复杂度,以及如何设计和实现高效的数据结构和算法。这对于任何想要深入...

    C++STL程序员开发指南(带目录)

    通过模板,STL能处理不同类型的元素,实现泛型编程。例如,`std::vector&lt;int&gt;`和`std::vector&lt;std::string&gt;`都是合法的类型,这得益于模板的灵活性。 此外,STL与C++标准库的其他部分(如智能指针、异常处理、输入/...

    C++模板编程和STL编程

    C++模板编程是C++语言中的一个重要特性,它允许开发者创建泛型代码,即能够处理多种数据类型的代码。模板分为函数模板和类模板,它们都提供了代码重用和类型无关性的能力。 函数模板允许我们定义一个可以接受不同...

    C++STL程序员开发指南

    STL的主要目标是提高代码的重用性,简化编程工作,并通过泛型编程(Generic Programming)提升程序的性能。在这本《C++ STL程序员开发指南》中,你将深入学习如何有效地使用STL进行C++程序设计。 一、STL的核心组件...

    C++ STL 开发技术导引(第6章)

    第4章 C++ STL泛型库概述 48 4.1 C++ STL的发展历程 48 4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3...

    C++模板与STL库介绍

    C++模板和STL库是C++编程语言中的两个核心特性,它们极大地提高了代码的复用性和效率。本文将深入探讨这两个主题,并提供丰富的实践应用示例。 首先,我们来理解C++模板。模板是C++的一个强大工具,它允许程序员...

    C++函数STL速查手册.zip

    同时,STL的设计遵循了面向对象和泛型编程的原则,使得代码更具有可读性和可复用性。 手册中的彩色界面和按首字母排序的功能,使得在开发过程中快速定位所需函数变得轻松快捷。目录和索引链接使用户能够通过不同...

    C++ STL开发技术导引(第5章)

    第4章 C++ STL泛型库概述 48 4.1 C++ STL的发展历程 48 4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3...

    Visual C++经典(库函数)——库函数一网打尽!!!

    STL提供了泛型编程的工具,如迭代器、容器、算法和函数对象,这些都以模板的形式存在,允许开发者创建高度可重用的代码。 5. **WinAPI库**:Visual C++也提供了对Windows API的直接访问,这使得开发者可以直接控制...

    C++泛型用法_.docx

    C++泛型编程,也称为模板(Template),是C++语言中的一个重要特性,它允许开发者创建可重用的代码片段,这些片段可以适用于多种数据类型。泛型编程的主要目标是提高代码的灵活性和效率,避免因类型不同而重复编写...

    STL入门快速入门教程-----学习C++

    STL的设计理念是通过泛型编程,使代码具有更强的抽象性和通用性。与面向对象编程(OOP)相比,泛型编程更注重数据和操作的分离,使得代码更加灵活,可以适应多种数据类型。在Java等不支持泛型编程的语言中,实现类似...

    自己整理的C++ STL代码 很详细

    在C++编程中,STL(Standard Template Library,标准模板库)是一组高效、泛型的容器、算法和迭代器的集合,极大地提高了程序的可重用性和开发效率。本篇将详细介绍C++ STL中的一些关键容器,如priority_queue、...

    C++ STL开发技术导引(第3章)

    第4章 C++ STL泛型库概述 48 4.1 C++ STL的发展历程 48 4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3...

Global site tag (gtag.js) - Google Analytics