c++string用法举例,c++里string的用法
相信用过MFC编程的朋友应该对这个类CString印象很深吧?的确,MFC中的CString类用起来真的非常方便。但是如果离开MFC框架,有没有那么方便使用的类呢?答案是肯定的。有人可能会说,即使不用MFC框架,也能找到在MFC中使用API的方法。具体操作方法在本文最后给出。其实很多人可能都忽略了标准C中string类的使用,C标准中提供的string类的功能也是非常强大的,一般我们开发项目的时候都可以用到。现列举部分具体用法如下,仅供参考。好了,废话少说,言归正传!
要在标准c中使用string类,必须包含
#include string //注意是string,不是string.h头文件用。h在C语言中。
使用STD:string;
使用STD:wstring;
或者
使用命名空间std
现在可以使用string/wstring,分别对应char和wchar_t。
string和wstring的用法是一样的,下面仅以string为例介绍:
类字符串的构造函数:
string(const char * s);//用C字符串s初始化。
string(int n,char c);//用n个字符c初始化。
此外,string类还支持默认构造函数和复制构造函数,如strings1string s2= hello都写对了。当构造的字符串太长而无法表达时,将引发length_error异常;
类字符串的字符操作:
const char运算符[](int n)const;
const char at(int n)const;
char运算符[](int n);
char at(int n);
运算符[]和at()都返回当前字符串中第n个字符的位置,但是at函数提供范围检查,并在超出范围时抛出out_of_range异常。下标运算符[]不提供检查访问。
const char * data()const;//返回一个非空终止的C字符数组
const char * c _ str()const;//返回一个空终止的C字符串
int copy(char *s,int n,int pos=0)const;//将当前字符串中以pos开头的N个字符复制到以S开头的字符数组中,并返回实际复制的数量。
字符串的属性描述:
int capacity()const;//返回当前容量(即在不增加内存的情况下,字符串中可以存储的元素数量)
int max _ size()const;//返回string对象中可以存储的最大字符串的长度
int size()const;//返回当前字符串的大小
int length()常量;//返回当前字符串的长度
bool empty()常量;//当前字符串是否为空
void resize(int len,char c);//将字符串的当前大小设置为len,用字符c填充不足的部分。
字符串类的I/O操作:
类重载运算符operator用于输入,同一个重载运算符operator用于输出操作。
getline(istream in,string)函数用于将输入流中的字符串读取到s中,由换行符“\n”分隔。
字符串的赋值:
String operator=(const string //将字符串S赋给当前字符串
字符串赋值(const char * s);//用类型C字符串s赋值。
string assign(const char *s,int n);//分配以C字符串s开头的n个字符的值。
String assign(const string //将字符串S赋给当前字符串
string assign(int n,char c);//将N个字符C赋给当前字符串
string assign(const string s,int start,int n);//将字符串S中从开始的N个字符赋给当前字符串
string assign(const_iterator在前,const_iterator在后);//将第一个和最后一个迭代器之间的部分赋给字符串
字符串的连接:
String operator=(const string //将字符串S连接到当前字符串的末尾
字符串追加(const char * s);//将C类型字符串连接到当前字符串的末尾
string append(const char *s,int n);//将C类型字符串S的前N个字符连接到当前字符串的末尾
字符串追加(常量字符串//与运算符=()相同)
string append(const string s,int pos,int n);//将字符串S中pos到当前字符串末尾的N个字符连接起来
string append(int n,char c);//将N个字符C添加到当前字符串的末尾
string append(const_iterator在前,const_iterator在后);//将迭代器第一个和最后一个之间的部分连接到当前字符串的末尾
字符串的比较:
弯曲件运算符==(常量字符串s1,常量字符串s2)常量;//比较两个字符串是否相等
运算符 , ,=,=,!=均被重载用于字符串的比较;
int比较(常量字符串s)常量;//比较当前字符串和s的大小
int compare(int pos,int n,const string s)const;//比较当前字符串从刷卡机开始的n个字符组成的字符串与s的大小
int compare(int pos,int n,const string s,int pos2,int N2)const;//比较当前字符串从刷卡机开始的n个字符组成的字符串与s中
//pos2开始的氮气个字符组成的字符串的大小
int compare(const char * s)const;
int compare(int pos,int n,const char * s)const;
int compare(int pos,int n,const char *s,int pos 2)const;
比较函数在时返回1, 时返回-1,==时返回0
线的子串:
string substr(int pos=0,int n=NPOs)const;//返回刷卡机开始的n个字符组成的字符串
线的交换:
无效交换(字符串S2);//交换当前字符串与s2的值
线类的查找函数:
int find(char c,int pos=0)const;//从刷卡机开始查找字符c在当前字符串的位置
int find(const char *s,int pos=0)const;//从刷卡机开始查找字符串s在当前串中的位置
int find(const char *s,int pos,int n)const;//从刷卡机开始查找字符串s中前n个字符在当前串中的位置
int find(常量字符串s,int pos=0)常量;//从刷卡机开始查找字符串s在当前串中的位置
//查找成功时返回所在位置,失败返回string:NPO的值
int rfind(char c,int pos=NPOs)const;//从刷卡机开始从后向前查找字符c在当前串中的位置
int rfind(const char *s,int pos=NPOs)const;
int rfind(const char *s,int pos,int n=NPOs)const;
int rfind(const string s,int pos=NPOs)const;
//从刷卡机开始从后向前查找字符串s中前n个字符组成的字符串在当前串中的位置,成功返回所在位置,失败时返回string:NPO的值
int find_first_of(char c,int pos=0)const;//从刷卡机开始查找字符c第一次出现的位置
int find_first_of(const char *s,int pos=0)const;
int find_first_of(const char *s,int pos,int n)const;
int find_first_of(常量字符串s,int pos=0)常量;
//从刷卡机开始查找当前串中第一个在s的前n个字符组成的数组里的字符的位置。查找失败返回string:NPO
int find_first_not_of(char c,int pos=0)const;
int find _ first _ not _ of(const char * s,int pos=0)const;
int find _ first _ not _ of(const char * s,int pos,int n)const;
int find_first_not_of(常量字符串s,int pos=0)常量;
//从当前串中查找第一个不在串s中的字符出现的位置,失败返回string:NPO
int find_last_of(char c,int pos=NPOs)const;
int find_last_of(const char *s,int pos=NPOs)const;
int find_last_of(const char *s,int pos,int n=NPOs)const;
int find_last_of(常量字符串s,int pos=npos常量;
int find_last_not_of(char c,int pos=NPOs)const;
int find _ last _ not _ of(const char * s,int pos=NPOs)const;
int find _ last _ not _ of(const char * s,int pos,int n)const;
int find_last_not_of(常量字符串s,int pos=npos常量;
//find_last_of和查找最后一个不是的与find_first_of和find_first_not_of相似,只不过是从后向前查找
线类的替换函数:
字符串替换(int p0,int n0,const char * s);//删除从p0蛋白蛋白开始的没有个字符,然后在p0蛋白蛋白处插入串s
string replace(int p0,int n0,const char *s,int n);//删除p0蛋白蛋白开始的没有个字符,然后在p0蛋白蛋白处插入字符串s的前n个字符
字符串替换(int p0,int n0,const string //删除从p0蛋白蛋白开始的没有个字符,然后在p0蛋白蛋白处插入串s
string replace(int p0,int n0,const string s,int pos,int n);//删除p0蛋白蛋白开始的没有个字符,然后在p0蛋白蛋白处插入串s中从刷卡机开始的n个字符
string replace(int p0,int n0,int n,char c);//删除p0蛋白蛋白开始的没有个字符,然后在p0蛋白蛋白处插入n个字符c
字符串替换(迭代器first0,迭代器last0,const char * s);//把[名字0,姓氏0]之间的部分替换为字符串s
字符串替换(迭代器first0,迭代器last0,const char *s,int n);//用s的前N个字符替换[first0,last0之间的部分。
String replace (iterator first0,iterator last0,const string//用字符串s替换[first0,last0]之间的部分。
string replace(迭代器first0,迭代器last0,int n,char c);//用N个字符c替换[first0,last0之间的部分。
字符串替换(iterator first0,iterator last0,const_iterator first,const _ iterator last);//将[first0,last 0]之间的部分替换为[first,last]之间的字符串
类字符串的插入函数:
字符串插入(int p0,const char * s);
string insert(int p0,const char *s,int n);
字符串插入(int p0,const string
string insert(int p0,const string s,int pos,int n);
//前4个函数将pos的前N个字符插入到字符串S的p0处。
string insert(int p0,int n,char c);//此函数在p0处插入n个字符C
迭代器插入(迭代器it,char c);//在该处插入字符C,并返回插入的迭代器的位置
void insert(iterator it,const_iterator first,const _ iterator last);//在[first,last]之间插入字符
void insert(迭代器it,int n,char c);//在它上面插入N个字符C
字符串类的删除函数
迭代器擦除(迭代器在先,迭代器在后);//删除[first,last]之间的所有字符,并返回被删除的迭代器的位置
迭代器erase(迭代器it);//删除它所指向的字符,返回被删除的迭代器的位置。
字符串擦除(int pos=0,int n=NPOs);//删除pos的前N个字符,返回修改后的字符串
字符串类的迭代器处理:
string类提供了向前和向后遍历的迭代器。迭代器提供了访问单个字符的语法,这类似于指针操作。迭代器不检查范围。
使用string:iterator或string:const_iterator声明迭代器变量。不允许Const _ iterator更改迭代的内容。常用的迭代器函数有:
const _ iterator begin()const;
迭代器begin();//返回字符串的起始位置
const _ iterator end()const;
迭代器end();//返回字符串最后一个字符后的位置
const _ iterator r begin()const;
迭代器Rb egin();//返回字符串最后一个字符的位置
const _ iterator rend()const;
迭代器render();//返回字符串第一个字符位置的前面
Rbegin和rend用于从后向前的迭代访问,通过设置迭代器string: reverse _ iterator,string: const _ reverse _ iterator实现。
字符串流处理:
通过在#include sstream的头文件中定义ostringstream和istringstream变量来实现。
例如:
字符串输入(‘你好,这是测试’);
istringstream是(输入);
字符串s1、s2、s3、S4;
是s1 s2 s3 s4//s1=您好,这,s2=是,s3=a ,s4=测试
ostringstream os
os s1 s2 s3 s4
cout OS . str();
以上是对C字符串类的简单介绍。如果用得好,它的功能不会比MFC中的CString类逊色。呵呵,个人观点!
最后,我们将介绍如何在Win32应用程序中引用MFC中的一些类,如CString。
1.右键单击项目目录下的“属性”-“配置属性”-“常规”-“MFC的使用”-“在静态库中使用MFC”。
默认值为:“使用标准Windows库”,如下图所示:
2.在您使用的所有头文件之前包含#include afxwin.h。例如,可以在stdafx.h文件的前面包含#include afxwin.h头文件,以便可以在源代码中使用它。
CString类,但这也有一个缺点,就是编译后的程序比原程序大很多。我尝试了一个小程序,通过选择“使用标准Windows库”来编译它
的发布版本是92kb左右,用‘在静态库中使用MFC’编译的发布版本是192kb左右,大了100kb,所以这是我个人的考虑。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。