c++中string的用法
c语言中标记的用法
c语言中标记的用法在C语言中,标记(Token)是语言中的一个基本单位,它是语言中的一个词或字符的序列。
标记可以分为以下几种类型:1. 标识符(Identifier):标识符是用来表示变量、函数、结构体等实体的名称。
标识符必须以字母、下划线或汉字开头,后面可以是字母、数字、下划线或汉字的组合。
例如:int、printf、x、_count等。
2. 关键字(Keyword):关键字是C语言中具有特殊含义的词汇。
这些词汇被C语言保留,不能用作用户自定义的标识符。
例如:int、char、for、if等。
3. 运算符(Operator):运算符是用来进行各种运算操作的符号。
例如:+、-、*、/、>、<等。
4. 分隔符(Delimiter):分隔符用于标识程序中不同的结构和语句的开始和结束。
例如:{}、()、[]、,、;等。
5. 常量(Constant):常量是程序中固定不变的数据值。
常量可以分为整型常量、浮点型常量、字符常量和字符串常量等。
6. 字符串(String):字符串是由一串字符组成的序列。
字符串常量用双引号括起来。
例如:"Hello, World!"。
7. 注释(Comment):注释是程序中的一种文本,用于对程序进行解释和说明。
注释不会被编译,只是起辅助作用。
注释可以使用//或/*...*/表示。
在C语言中,编译器会将源代码分解成一个个标记,并根据标记的类型进行相应的处理。
标记在程序分析、词法分析和语法分析等过程中起到了重要的作用。
C++中stringstream的用法和实例
C++中stringstream的⽤法和实例之前在leetcode中进⾏string和int的转化时使⽤过istringstream,现在⼤致总结⼀下⽤法和测试⽤例。
介绍:C++引⼊了ostringstream、istringstream、stringstream这三个类,要使⽤他们创建对象就必须包含sstream.h头⽂件。
istringstream类⽤于执⾏C++风格的串流的输⼊操作。
ostringstream类⽤于执⾏C风格的串流的输出操作。
stringstream类同时可以⽀持C风格的串流的输⼊输出操作。
下图详细描述了⼏种类之间的继承关系:istringstream是由⼀个string对象构造⽽来,从⼀个string对象读取字符。
ostringstream同样是有⼀个string对象构造⽽来,向⼀个string对象插⼊字符。
stringstream则是⽤于C++风格的字符串的输⼊输出的。
代码测试:#include<iostream>#include <sstream>using namespace std;<pre name="code" class="cpp">int main(){string test = "-123 9.87 welcome to, 989, test!";istringstream iss;//istringstream提供读 string 的功能iss.str(test);//将 string 类型的 test 复制给 iss,返回 voidstring s;cout << "按照空格读取字符串:" << endl;while (iss >> s){cout << s << endl;//按空格读取string}cout << "*********************" << endl;istringstream strm(test);//创建存储 test 的副本的 stringstream 对象int i;float f;char c;char buff[1024];strm >> i;cout <<"读取int类型:"<< i << endl;strm >> f;cout <<"读取float类型:"<<f << endl;strm >> c;cout <<"读取char类型:"<< c << endl;strm >> buff;cout <<"读取buffer类型:"<< buff << endl;strm.ignore(100, ',');int j;strm >> j;cout <<"忽略‘,'读取int类型:"<< j << endl;system("pause");return 0;}输出:总结:1)在istringstream类中,构造字符串流时,空格会成为字符串参数的内部分界;2)istringstream类可以⽤作string与各种类型的转换途径3)ignore函数参数:需要读取字符串的最⼤长度,需要忽略的字符代码测试:int main(){ostringstream out;out.put('t');//插⼊字符out.put('e');out << "st";string res = out.str();//提取字符串;cout << res << endl;system("pause");return 0;}输出:test字符串;注:如果⼀开始初始化ostringstream,例如ostringstream out("test"),那么之后put或者<<时的字符串会覆盖原来的字符,超过的部分在原始基础上增加。
String 中字符(串)查找
String的用法String类仅仅查找操作就为我们提供了6种查找函数,每种函数以不同形式的find命名。
find、r find、find_first_of 、find_first_not_of、find_last_of 、find_last_not_of这些都是const成员函数,const 也就是说,它们只是为了针对某种用途去寻找子串的位置,并不能够改变它们所作用的那个串的值。
这些操作全都返回string::size_type类型的值,也就是说,返回的结果是一个unsigned值(即,无符号整形)。
要么是以下标形式查找匹配所发生的位置(也就是返回当前查找到的子串下标);或者返回一个名为string::npos 类型的值,说明查找没有匹配,也就是找不到你所查找的字符。
就这么两种形式,要么是返回下标,要么返回npos。
每个查找操作都有4个重载版本,每个版本使用不同的参数形式。
基本上,这些操作的不同之处在于查找的到底是单个字符,还是另一个string字符串,或者c风格的以空字符结束的字符串,还是用字符数组给出的特定数目的字符集合。
比如说:size_type find(const basic_string &s , size_type i=0) const;const修饰函数参数是它最广泛的一种用途,它表示函数体中不能修改参数的值(包括参数本身的值或者参数其中包含的值)。
注:basic_string::nposAn unsigned integral value initialized to –1 that indicates either "not found" or "all remaining characters" when a search function fails.static const size_type npos = -1;1、Find 查找子串第一次出现的位置Searches a string in a forward direction for the first occurrence of a substring that matches a specified sequence of characters最简单的查找操作就是find函数了。
VC++标准C++中的string类的用法总结
VC++标准C++中的string类的⽤法总结相信使⽤过MFC编程的朋友对CString这个类的印象应该⾮常深刻吧?的确,MFC中的CString类使⽤起来真的⾮常的⽅便好⽤。
但是如果离开了MFC框架,还有没有这样使⽤起来⾮常⽅便的类呢?答案是肯定的。
也许有⼈会说,即使不⽤MFC框架,也可以想办法使⽤MFC中的API,具体的操作⽅法在本⽂最后给出操作⽅法。
其实,可能很多⼈很可能会忽略掉标准C++中string类的使⽤。
标准C++中提供的string类得功能也是⾮常强⼤的,⼀般都能满⾜我们开发项⽬时使⽤。
现将具体⽤法的⼀部分罗列如下,只起⼀个抛砖引⽟的作⽤吧,好了,废话少说,直接进⼊正题吧!要想使⽤标准C++中string类,必须要包含#include <string>// 注意是<string>,不是<string.h>,带.h的是C语⾔中的头⽂件using std::string;using std::wstring;或using namespace std;下⾯你就可以使⽤string/wstring了,它们两分别对应着char和wchar_t。
string和wstring的⽤法是⼀样的,以下只⽤string作介绍:string类的构造函数:string(const char *s);//⽤c字符串s初始化<BR>string(int n,char c);//⽤n个字符c初始化此外,string类还⽀持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。
当构造的string太长⽽⽆法表达时会抛出length_error异常;string类的字符操作:const char &operator[](int n)const;const char &at(int n)const;char &operator[](int n);char &at(int n);//operator[]和at()均返回当前字符串中第n个字符的位置,但at函数提供范围检查,当越界时会抛出out_of_range异常,下标运算符[]不提供检查访问。
c语言中strstr函数的用法
c语言中strstr函数的用法一、概述strstr函数是C语言中一个非常常用的字符串处理函数,它用于在一个字符串中查找另一个字符串的出现位置。
该函数返回被查找字符串在目标字符串中第一次出现的地址,如果没有找到,则返回NULL。
二、函数原型```char *strstr(const char *str1, const char *str2);```三、参数说明- str1:目标字符串,需要搜索的字符串。
- str2:被搜索的字符串。
四、返回值- 如果被搜索的字符串在目标字符串中存在,则返回第一次出现的位置。
- 如果被搜索的字符串不存在于目标字符串中,则返回NULL。
五、使用示例以下是一个简单的使用示例:```#include <stdio.h>#include <string.h>int main(){char str1[] = "hello world";char str2[] = "world";char *ptr;ptr = strstr(str1, str2);if (ptr != NULL)printf("'%s' is found in '%s' at position %ld.\n", str2, str1, ptr - str1);elseprintf("'%s' is not found in '%s'.\n", str2, str1);return 0;}```输出结果为:```'world' is found in 'hello world' at position 6.```六、注意事项- strstr函数区分大小写,因此需要注意大小写问题。
- 如果被搜索的字符串为空串,则会直接返回目标串。
cjson_createstring的用法
cjson_createstring的用法下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by the editor. I hope that after you download them, they can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!In addition, our shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!cjson_createstring的用法引言在进行JSON数据处理时,一个重要的函数是`cjson_createstring`。
C#中string.format用法详解
C#中string.format⽤法详解String.Format ⽅法的⼏种定义:String.Format (String, Object) 将指定的 String 中的格式项替换为指定的 Object 实例的值的⽂本等效项。
String.Format (String, Object[]) 将指定 String 中的格式项替换为指定数组中相应 Object 实例的值的⽂本等效项。
String.Format (IFormatProvider, String, Object[]) 将指定 String 中的格式项替换为指定数组中相应 Object 实例的值的⽂本等效项。
指定的参数提供区域性特定的格式设置信息。
String.Format (String, Object, Object) 将指定的 String 中的格式项替换为两个指定的 Object 实例的值的⽂本等效项。
String.Format (String, Object, Object, Object) 将指定的 String 中的格式项替换为三个指定的 Object 实例的值的⽂本等效项。
常⽤的格式化数值结果表字符说明⽰例输出C货币string.Format("{0:C3}", 2)$2.000D⼗进制string.Format("{0:D3}", 2)002E科学计数法 1.20E+001 1.20E+001G常规string.Format("{0:G}", 2)2N⽤分号隔开的数字string.Format("{0:N}", 250000)250,000.00X⼗六进制string.Format("{0:X000}", 12)Cstring.Format("{0:000.000}", 12.2)012.200常⽤的⼏种实例1、字符串的数字格式代码如下:string str1 =string.Format("{0:N1}",56789); //result: 56,789.0string str2 =string.Format("{0:N2}",56789); //result: 56,789.00string str3 =string.Format("{0:N3}",56789); //result: 56,789.000string str8 =string.Format("{0:F1}",56789); //result: 56789.0string str9 =string.Format("{0:F2}",56789); //result: 56789.00string str11 =(56789 / 100.0).ToString("#.##"); //result: 567.89string str12 =(56789 / 100).ToString("#.##"); //result: 567string str = string.Format("{0:f2}", .2); //result: 0.202、格式化货币(跟系统的环境有关,中⽂系统默认格式化⼈民币,英⽂系统格式化美元)代码如下:string.Format("{0:C}",0.2)结果为:¥0.20 (英⽂操作系统结果:$0.20)默认格式化⼩数点后⾯保留两位⼩数,如果需要保留⼀位或者更多,可以指定位数代码如下:string.Format("{0:C1}",23.15)结果为:¥23.2 (截取会⾃动四舍五⼊)格式化多个Object实例代码如下:string.Format("市场价:{0:C},优惠价{1:C}",23.15,19.82)3、格式化⼗进制的数字(格式化成固定的位数,位数不能少于未格式化前,只⽀持整形)代码如下:string.Format("{0:D3}",23) //结果为:023string.Format("{0:D2}",1223) //结果为:1223,(精度说明符指⽰结果字符串中所需的最少数字个数。
Cstring和string的区别和联系
Cstring和string的区别和联系相同点:(1)用他们都可以取代对char*的使用。
(2)都封装了有丰富的字符串操作接口。
(3)他们都是C++的类库。
--以string的使用为例,不能有如下用法:string * pstr = NULL; //定义一个指向字符串的指针pstr->append("Hello world."); //在该字符串的末尾粘接上另一个字符。
这样做编译器不会有任何警告和错误,但是运行的时候就会有异常。
原因是没有理解string是一个类,而在定义类的对象的时候是需要调用其构造函数的。
上面既没有调用string的构造函数,而且还把指针赋值为NULL,很明显调用该类的对象的接口的时候会出错。
但是编译器却发现不了这个问题的。
正确的方法是如下:/*这里必须要用c++的宏new,而不能用c中的malloc,原因是new不但会分配一块内存,*//*还执行了类的构造函数。
当然,string类的实例化还可以通过已有的某个string对象进行,请另查阅*/string * pstr = new string("Hello world.");pstr->append("Hello world.");cout<<"string * pstr is:"<<*pstr<<endl;或者不用指针,如下也可以:string str; //会自动调用默认的构造函数,构造一个string类的对象。
str.apend("Hello world.");cout<<"string str is:"<<str<<endl;(4)他们都使用了模板的技术。
不同之处:(1)CString 类是微软的visual c++提供的MFC里面的一个类,所以只有支持MFC的工程才可以使用。
C++中字符串的常见操作
C++中字符串的常见操作字符串分割在⼀些⽐较流⾏的语⾔中,字符串分割是⼀个⽐较重要的⽅法,不论是在python,java这样的系统级语⾔还是js这样的前端脚本都会在⽤到字符串的分割,然⽽在c++中却没有这样的⽅法⽤来调⽤。
但是在boost中却提供分割⽅法。
使⽤vector实现下⾯是⽤vector实现的⼀个简单的split函数,借助string::find函数查找匹配⼦串的位置,然后截取剩下的字符串之后继续处理,实现对原字符串的完整处理。
vector<string> split(string &s, string &delim, bool removeEmpty = false, bool fullMatch = false) {vector<string> result;string::size_type start = 0, skip = 1;// 使⽤整个字符串进⾏查找,之后会直接跳过整个⼦字符串if (fullMatch) {skip = delim.length();}while (start != string::npos) {// 从start位置开始查找⼦字符串delim第⼀次出现的位置string::size_type finsh = s.find(delim, start);if (skip == 0) {finsh = string::npos;}// 从start开始到(finsh - start)处获得⼦字符串// 获得匹配字符串之前的字符串string token = s.substr(start, finsh - start);// 对token进⾏判断并决定是否移除空if (!(removeEmpty && token.empty())) {// 将匹配字符串之前的字符串放进向量中result.push_back(token);}// 判断此时是否到了原字符串的末尾if ((start = finsh) != string::npos) {// 将⼦字符串放进向量中,是为了保证原字符串的字符不丢失result.push_back(delim);// 将查找位置向前移动skip个位置start = start + skip;}}return result;}关于字符串的输⼊⽅法: std::cin , 多个单词使⽤函数std::getline(std::cin, s)这个函数接受两个参数:⼀个输⼊流对象和⼀个 string 对象。
c中string的用法
c中string的用法c中string的用法的用法你知道吗?下面小编就跟你们详细介绍下c中string的用法的用法,希望对你们有用。
c中string的用法的用法如下:为了在我们的程序中使用string类型,我们必须包含头文件<string>。
如下:#include <string> //注意这里不是string.h string.h是C字符串头文件#include <string>using namespace std;1.声明一个C++字符串声明一个字符串变量很简单:string Str;这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。
上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str初始化为一个空字符串。
String类的构造函数和析构函数如下:a) string s; //生成一个空字符串sb) string s(str) //拷贝构造函数生成str的复制品c) string s(str,stridx) //将字符串str内“始于位置stridx”的部分当作字符串的初值d) string s(str,stridx,strlen) //将字符串str内“始于stridx且长度顶多strlen”的部分作为字符串的初值e) string s(cstr) //将C字符串作为s的初值f) string s(chars,chars_len) //将C字符串前chars_len个字符作为字符串s的初值。
g) string s(num,c) //生成一个字符串,包含num个c字符h) string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值i) s.~string() //销毁所有字符,释放内存都很简单,我就不解释了。
2.字符串操作函数这里是C++字符串的重点,我先把各种操作函数罗列出来,不喜欢把所有函数都看完的人可以在这里找自己喜欢的函数,再到后面看他的详细解释。
C++中LIST和String用法
1.c++中的list用法#include<iostream>#include<list>#include<numeric>#include<algorithm>using namespace std;//创建一个list容器的实例LISTINTtypedef list<int>LISTINT;//创建一个list容器的实例LISTCHARtypedef list<int>LISTCHAR;void main(void){//--------------------------//用list容器处理整型数据//--------------------------//用LISTINT创建一个名为listOne的list对象LISTINT listOne;//声明i为迭代器LISTINT::iterator i;//从前面向listOne容器中添加数据listOne.push_front(2);listOne.push_front(1);//从后面向listOne容器中添加数据listOne.push_back(3);listOne.push_back(4);//从前向后显示listOne中的数据cout<<"listOne.begin()---listOne.end():"<<endl;for(i=listOne.begin();i!=listOne.end();++i)cout<<*i<<"";cout<<endl;//从后向后显示listOne中的数据LISTINT::reverse_iterator ir;cout<<"listOne.rbegin()---listOne.rend():"<<endl;for(ir=listOne.rbegin();ir!=listOne.rend();ir++){cout<<*ir<<"";}cout<<endl;//使用STL的accumulate(累加)算法int result=accumulate(listOne.begin(),listOne.end(),0);cout<<"Sum="<<result<<endl;cout<<"------------------"<<endl;//--------------------------//用list容器处理字符型数据//--------------------------//用LISTCHAR创建一个名为listOne的list对象LISTCHAR listTwo;//声明i为迭代器LISTCHAR::iterator j;//从前面向listTwo容器中添加数据listTwo.push_front('A');listTwo.push_front('B');//从后面向listTwo容器中添加数据listTwo.push_back('x');listTwo.push_back('y');//从前向后显示listTwo中的数据cout<<"listTwo.begin()---listTwo.end():"<<endl;for(j=listTwo.begin();j!=listTwo.end();++j)cout<<char(*j)<<"";cout<<endl;//使用STL的max_element算法求listTwo中的最大元素并显示j=max_element(listTwo.begin(),listTwo.end());cout<<"The maximum element in listTwo is:"<<char(*j)<<endl; }#include<iostream>#include<list>using namespace std;typedef list<int>INTLIST;//从前向后显示list队列的全部元素void put_list(INTLIST list,char*name){INTLIST::iterator plist;cout<<"The contents of"<<name<<":";for(plist=list.begin();plist!=list.end();plist++)cout<<*plist<<"";cout<<endl;}//测试list容器的功能void main(void){//list1对象初始为空INTLIST list1;//list2对象最初有10个值为6的元素INTLIST list2(10,6);//list3对象最初有3个值为6的元素INTLIST list3(list2.begin(),--list2.end());//声明一个名为i的双向迭代器INTLIST::iterator i;//从前向后显示各list对象的元素put_list(list1,"list1");put_list(list2,"list2");put_list(list3,"list3");//从list1序列后面添加两个元素list1.push_back(2);list1.push_back(4);cout<<"list1.push_back(2)and list1.push_back(4):"<<endl; put_list(list1,"list1");//从list1序列前面添加两个元素list1.push_front(5);list1.push_front(7);cout<<"list1.push_front(5)and list1.push_front(7):"<<endl; put_list(list1,"list1");//在list1序列中间插入数据list1.insert(++list1.begin(),3,9);cout<<"list1.insert(list1.begin()+1,3,9):"<<endl;put_list(list1,"list1");//测试引用类函数cout<<"list1.front()="<<list1.front()<<endl;cout<<"list1.back()="<<list1.back()<<endl;//从list1序列的前后各移去一个元素list1.pop_front();list1.pop_back();cout<<"list1.pop_front()and list1.pop_back():"<<endl; put_list(list1,"list1");//清除list1中的第2个元素list1.erase(++list1.begin());cout<<"list1.erase(++list1.begin()):"<<endl;put_list(list1,"list1");//对list2赋值并显示list2.assign(8,1);cout<<"list2.assign(8,1):"<<endl;put_list(list2,"list2");//显示序列的状态信息cout<<"list1.max_size():"<<list1.max_size()<<endl;cout<<"list1.size():"<<list1.size()<<endl;cout<<"list1.empty():"<<list1.empty()<<endl;//list序列容器的运算put_list(list1,"list1");put_list(list3,"list3");cout<<"list1>list3:"<<(list1>list3)<<endl;cout<<"list1<list3:"<<(list1<list3)<<endl;//对list1容器排序list1.sort();put_list(list1,"list1");//结合处理list1.splice(++list1.begin(),list3);put_list(list1,"list1");put_list(list3,"list3");}2.标准C++中的string类的用法总结相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用。
c中tostring的用法
c中tostring的用法c中tostring的用法的用法你知道吗?下面小编就跟你们详细介绍下c中tostring的用法的用法,希望对你们有用。
c中tostring的用法的用法如下:C货币2.5.ToString("C")¥2.50D十进制数25.ToString("D5")00025E科学型25000.ToString("E")2.500000E+005F固定点25.ToString("F2")25.00G常规2.5.ToString("G")2.5数字2500000.ToString("N")2,500,000.00X十六进制255.ToString("X")FFformatCode 是可选的格式化代码字符串。
(详细内容请搜索"格式化字符串"查看)必须用"{"和"}"将格式与其他字符分开。
如果恰好在格式中也要使用大括号,可以用连续的两个大括号表示一个大括号,即:"{{"或者"}}"。
常用格式举例:(1) int i=12345;this.textBox1.Text=i.ToString();//结果 12345(this指当前对象,或叫当前类的实例)this.textBox2.Text=i.ToString("d8");//结果 00012345(2) int i=123;double j=123.45;string s1=string.Format("the value is {0,7:d}",i);string s2=string.Format("the value is {0,7:f3}",j);this.textBox1.Text=s1 ;//结果 the value is 123this.textBox2.Text=s2;//结果 the value is 123.450(3)double i=12345.6789;this.textBox1.Text=i.ToString("f2"); //结果 12345.68this.textBox2.Text=i.ToString("f6");//结果 12345.678900(4)double i=12345.6789;this.textBox1.Text=i.ToString("n"); //结果 12,345.68this.textBox2.Text=i.ToString("n4"); //结果 12,345.6789(5)double i=0.126;string s=string.Format("the value is {0:p}",i);this.textBox1.Text=i.ToString("p"); //结果 12.6%this.textBox2.Text=s; //结果 the value is 12.6%(6) DateTime dt =new DateTime(2003,5,25);this.textBox1.Text=dt.ToString("yy.M.d");//结果 03.5.25this.textBox2.Text=dt.ToString("yyyy年M月");//结果 2003年5月Convert.T oDateTime("2005/12/2222:22:22").ToString("yyyy/MM/dd HH:mm:ss")"2005/12/22 22:22:22"(7) int i=123;double j=123.45;string s=string.Format("i:{0,-7},j:{1,7}",i,j);//-7表示左对齐,占7位this.textBox1.Text=s ;//结果i:123 ,j: 123.45DateTime.ToString()用法详解我们经常会遇到对时间进行转换,达到不同的显示效果,默认格式为:2006-6-6 14:33:34如果要换成成200606,06-2006,2006-6-6或更多的格式该怎么办呢?这里将要用到:DateTime.T oString的方法(String, IFormatProvider)示例:using System;using System.Globalization;String format="D";DateTime date=DataTime.Now;Response.Write(date.ToString(format, DateTimeFormatInfo.InvariantInfo));结果输出Thursday, June 16, 2006在这里列出了参数format格式详细用法=======================格式字符关联属性/说明d ShortDatePatternD LongDatePatternf 完整日期和时间(长日期和短时间)F FullDateTimePattern(长日期和长时间)g 常规(短日期和短时间)G 常规(短日期和长时间)m、M MonthDayPatternr、R RFC1123Patterns 使用当地时间的 SortableDateTimePattern(基于 ISO 8601)t ShortTimePatternT LongTimePatternu UniversalSortableDateTimePattern 用于显示通用时间的格式U 使用通用时间的完整日期和时间(长日期和长时间)y、Y YearMonthPattern下表列出了可被合并以构造自定义模式的模式====================================== ==这些模式是区分大小写的;例如,识别"MM",但不识别"mm"。
setstring函数用法c++
setstring函数用法c++在C语言中,setstring函数是一个非常实用的函数,它用于设置字符串变量的值。
本文将详细介绍setstring函数的用法,帮助您更好地理解和使用它。
一、setstring函数简介setstring函数是C语言标准库中的一个函数,它属于字符串操作函数范畴。
该函数接受一个指向字符串的指针作为参数,并将指定的字符串赋值给该指针所指向的变量。
二、函数语法```cvoidsetstring(char*str);```其中,str是一个指向字符串的指针,用于指定要设置的字符串。
三、函数使用示例下面是一个使用setstring函数的示例代码:```c#include<stdio.h>#include<string.h>intmain(){charstr[50];//定义一个字符串变量printf("请输入一个字符串:");scanf("%s",str);//获取用户输入的字符串setstring(str);//设置字符串变量的值为用户输入的字符串printf("设置的字符串为:%s\n",str);//输出设置的字符串return0;}```在上述示例中,我们首先定义了一个字符数组str,用于存储用户输入的字符串。
然后使用scanf函数获取用户输入的字符串,并将其赋值给str变量。
接着调用setstring函数,将str变量的值设置为用户输入的字符串。
最后使用printf函数输出设置的字符串。
四、注意事项在使用setstring函数时,需要注意以下几点:1.setstring函数不会修改传入的指针,它只是将指定的字符串赋值给指针所指向的变量。
因此,在使用setstring函数之前,需要确保指针所指向的变量已经分配了足够的内存空间。
2.setstring函数只能用于设置字符串变量的值,不能用于修改已存在的字符串。
C# String.Format格式化输出和ToString()的一些常用用法
C# String.Format格式化输出字符串的格式化输出:string s1 = 12345.ToString("n"); //生成 12,345.00string s2 = 12345.ToString("C"); //生成¥12,345.00string s3 = 12345.ToString("e"); //生成 1.234500e+004string s4 = 12345.ToString("f4"); //生成 12345.0000string s5 = 12345.ToString("x"); //生成 3039 (16进制)string s6 = 612345.ToString("p"); //生成 1,234,500.00%string s7 = String.Format("{0:(###) ###-####}", 8005551212);//生成(1800)555-1212int a = 12345678;double b = 1234.12543;string s8= String.Format("abcd{0:C}abcd", b);//abcd¥1,234.13abcdstring s9 = "abcd" + b.ToString("C") + "abcd";//abcd¥1,234.13abcdstring s10 = String.Format("{0:C3}", b);//¥1,234.125string s11 = b.ToString("C3");//¥1,234.125string s12 = String.Format("{0:d}", a);//十进制--12345678string s13 = b.ToString("d");//十进制--相同的类型,转换报错string s14 = String.Format("{0:e}", a);//指数--1.234568e+007string s15 = b.ToString("e");//指数--1.234125e+003string s16 = String.Format("{0:f}", a);//定点数--12345678.00string s17 = b.ToString("f");//定点数--1234.13string s18 = String.Format("{0:n}", a);//数值--12,345,678.00string s19 = b.ToString("n");//数值--1,234.13string s20 = String.Format("{0:x}", a);//十六进制--bc614estring s21 = b.ToString("x");//16--带有小数不能转换,出错string s22 = String.Format("{0:g}", a);//通用为最紧凑--12345678string s23 = b.ToString("g");//通用为最紧凑--1234.12543b = 4321.12543;a = 1234;string s24 = String.Format("{0:000000}", a);// 001234string s25 = String.Format("{0:000000}", b);// 004321//# 描述:占位符,如果可能,填充位string s26 = String.Format("{0:#######}", a);// 1234string s27 = String.Format("{0:#######}", b);// 4321string s28 = String.Format("{0:#0####}", a);// 01234string s29 = String.Format("{0:0#0000}", b);// 004321//. 描述:小数点string s30 = String.Format("{0:000.000}", a);//1234.000string s31 = String.Format("{0:000.000}", b);//4321.125b = 87654321.12543;a = 12345678;//, 描述:数字分组,也用于增倍器string s32 = String.Format("{0:0,00}", a);// 12,345,678string s33 = String.Format("{0:0,00}", b);// 87,654,321string s34 = String.Format("{0:0,}", a);// 12346string s35 = String.Format("{0:0,}", b);// 87654string s36 = String.Format("{0:0,,}", a);// 12string s37 = String.Format("{0:0,,}", b);// 88string s38 = String.Format("{0:0,,,}", a);// 0string s39 = String.Format("{0:0,,,}", b);// 0// % 描述:格式为百分数string s40 = String.Format("{0:0%}", a);// 1234567800%string s41 = String.Format("{0:#%}", b);// 8765432113%string s42 = String.Format("{0:0.00%}", a);// 1234567800.00%string s43 = String.Format("{0:#.00%}", b);// 8765432112.54%格式原始数据结果"{0:P}" 0.40 40%数字 {0:N2} 12.36数字 {0:N0} 13货币 {0:c2} $12.36货币 {0:c4} $12.3656货币 "¥{0:N2}" ¥12.36科学计数法 {0:E3} 1.23E+001百分数 {0:P} 12.25% P and p present the same.日期 {0:D} 2006年11月25日日期 {0:d} 2006-11-25日期 {0:f} 2006年11月25日 10:30日期 {0:F} 2006年11月25日 10:30:00日期 {0:s} 2006-11-26 10:30:00时间 {0:T} 10:30:00DateTime dt = DateTime.Now;Label1.Text = dt.ToString();//2005-11-5 13:21:25Label2.Text = dt.ToFileTime().ToString();//127756416859912816Label3.Text = dt.ToFileTimeUtc().ToString();//127756704859912816Label4.Text = dt.ToLocalTime().ToString();//2005-11-5 21:21:25Label5.Text = dt.ToLongDateString().ToString();//2005年11月5日Label6.Text = dt.ToLongTimeString().ToString();//13:21:25Label7.Text = dt.ToOADate().ToString();//38661.5565508218Label8.Text = dt.ToShortDateString().ToString();//2005-11-5Label9.Text = dt.ToShortTimeString().ToString();//13:21Label10.Text = dt.ToUniversalTime().ToString();//2005-11-5 5:21:25Label1.Text = dt.Year.ToString();//2005Label2.Text = dt.Date.ToString();//2005-11-5 0:00:00Label3.Text = dt.DayOfWeek.ToString();//SaturdayLabel4.Text = dt.DayOfYear.ToString();//309Label5.Text = dt.Hour.ToString();//13Label6.Text = lisecond.ToString();//441Label7.Text = dt.Minute.ToString();//30Label8.Text = dt.Month.ToString();//11Label9.Text = dt.Second.ToString();//28Label10.Text = dt.Ticks.ToString();//632667942284412864Label11.Text = dt.TimeOfDay.ToString();//13:30:28.4412864Label1.Text = dt.ToString();//2005-11-5 13:47:04Label2.Text = dt.AddYears(1).ToString();//2006-11-5 13:47:04Label3.Text = dt.AddDays(1.1).ToString();//2005-11-6 16:11:04Label4.Text = dt.AddHours(1.1).ToString();//2005-11-5 14:53:04Label5.Text = dt.AddMilliseconds(1.1).ToString();//2005-11-5 13:47:04Label6.Text = dt.AddMonths(1).ToString();//2005-12-5 13:47:04Label7.Text = dt.AddSeconds(1.1).ToString();//2005-11-5 13:47:05Label8.Text = dt.AddMinutes(1.1).ToString();//2005-11-5 13:48:10Label9.Text = dt.AddTicks(1000).ToString();//2005-11-5 13:47:04Label10.Text = pareTo(dt).ToString();//0Label11.Text = dt.Add(?).ToString();//问号为一个时间段Label1.Text = dt.Equals("2005-11-6 16:11:04").ToString();//FalseLabel2.Text = dt.Equals(dt).ToString();//TrueLabel3.Text = dt.GetHashCode().ToString();//1474088234Label4.Text = dt.GetType().ToString();//System.DateTimeLabel5.Text = dt.GetTypeCode().ToString();//DateTimeLabel1.Text = dt.GetDateTimeFormats('s')[0].ToString();//2005-11-05T14:06:25Label2.Text = dt.GetDateTimeFormats('t')[0].ToString();//14:06Label3.Text = dt.GetDateTimeFormats('y')[0].ToString();//2005年11月Label4.Text = dt.GetDateTimeFormats('D')[0].ToString();//2005年11月5日Label5.Text = dt.GetDateTimeFormats('D')[1].ToString();//2005 11 05Label6.Text = dt.GetDateTimeFormats('D')[2].ToString();//星期六2005 11 05Label7.Text = dt.GetDateTimeFormats('D')[3].ToString();//星期六2005年11月5日Label8.Text = dt.GetDateTimeFormats('M')[0].ToString();//11月5日Label9.Text = dt.GetDateTimeFormats('f')[0].ToString();//2005年11月5日14:06Label10.Text = dt.GetDateTimeFormats('g')[0].ToString();//2005-11-5 14:06Label11.Text = dt.GetDateTimeFormats('r')[0].ToString();//Sat, 05 Nov 2005 14:06:25 GMT Label1.Text = String.Format("{0:d}",dt);//2005-11-5Label2.Text = String.Format("{0:D}",dt);//2005年11月5日Label3.Text = String.Format("{0:f}",dt);//2005年11月5日14:23Label4.Text = String.Format("{0:F}",dt);//2005年11月5日14:23:23Label5.Text = String.Format("{0:g}",dt);//2005-11-5 14:23Label6.Text = String.Format("{0:G}",dt);//2005-11-5 14:23:23Label7.Text = String.Format("{0:M}",dt);//11月5日Label8.Text = String.Format("{0:R}",dt);//Sat, 05 Nov 2005 14:23:23 GMTLabel9.Text = String.Format("{0:s}",dt);//2005-11-05T14:23:23Label10.Text String.Format("{0:t}",dt);//14:23Label11.Text = String.Format("{0:T}",dt);//14:23:23Label12.Text = String.Format("{0:u}",dt);//2005-11-05 14:23:23ZLabel13.Text = String.Format("{0:U}",dt);//2005年11月5日6:23:23Label14.Text = String.Format("{0:Y}",dt);//2005年11月Label15.Text = String.Format("{0}",dt);//2005-11-5 14:23:23Label16.Text = String.Format("{0:yyyyMMddHHmmssffff}",dt);stringstr1 =String.Format("{0:N1}",56789); //result: 56,789.0 stringstr2 =String.Format("{0:N2}",56789); //result: 56,789.00 stringstr3 =String.Format("{0:N3}",56789); //result: 56,789.000 stringstr8 =String.Format("{0:F1}",56789); //result: 56789.0 stringstr9 =String.Format("{0:F2}",56789); //result: 56789.00 stringstr11 =(56789 / 100.0).ToString("#.##"); //result: 567.89 stringstr12 =(56789 / 100).ToString("#.##"); //result: 567C 或c货币Console.Write("{0:C}", 2.5); //$2.50Console.Write("{0:C}", -2.5); //($2.50)D 或d十进制数Console.Write("{0:D5}", 25); //00025E 或e科学型Console.Write("{0:E}", 250000); //2.500000E+005F 或f固定点Console.Write("{0:F2}", 25); //25.00Console.Write("{0:F0}", 25); //25G 或g常规Console.Write("{0:G}", 2.5); //2.5N 或n数字Console.Write("{0:N}", 2500000); //2,500,000.00X 或x十六进制Console.Write("{0:X}", 250); //FAConsole.Write("{0:X}", 0xffff); //FFFFc#中ToString()的一些常用用法备忘字符型转换为字符串1.// C 货币2. 2.5.ToString("C"); // ¥2.503.// D 10进制数4.25.ToString("D5"); // 250005.// E 科学型6.25000.ToString("E"); // 2.500000E+0057.// F 固定点8.25.ToString("F2"); // 25.009.// G 常规10.2.5.ToString("G"); // 2.511.// N 数字12.2500000.ToString("N"); // 2,500,000.0013.// X 16进制14.255.ToString("X"); // FF如果要2位16进制数255.ToString("X2");1.// C# 日期格式2.DateTime dt= DateTime.Now;3.4.dt.ToString();//2005-11-5 13:21:255.dt.ToFileTime().ToString();//1277564168599128166.dt.ToFileTimeUtc().ToString();//1277567048599128167.dt.ToLocalTime().ToString();//2005-11-5 21:21:258.dt.ToLongDateString().ToString();//2005年11月5日9.dt.ToLongTimeString().ToString();//13:21:2510.dt.ToOADate().ToString();//38661.556550821811.dt.ToShortDateString().ToString();//2005-11-512.dt.ToShortTimeString().ToString();//13:2113.dt.ToUniversalTime().ToString();//2005-11-5 5:21:2514.dt.Year.ToString();//200515.dt.Date.ToString();//2005-11-5 0:00:0016.dt.DayOfWeek.ToString();//Saturday17.dt.DayOfYear.ToString();//30918.dt.Hour.ToString();//13lisecond.ToString();//44120.dt.Minute.ToString();//3021.dt.Month.ToString();//1122.dt.Second.ToString();//2823.dt.Ticks.ToString();//63266794228441286424.dt.TimeOfDay.ToString();//13:30:28.441286425.dt.ToString();//2005-11-5 13:47:0426.dt.AddYears(1).ToString();//2006-11-5 13:47:0427.dt.AddDays(1.1).ToString();//2005-11-6 16:11:0428.dt.AddHours(1.1).ToString();//2005-11-5 14:53:0429.dt.AddMilliseconds(1.1).ToString();//2005-11-5 13:47:0430.dt.AddMonths(1).ToString();//2005-12-5 13:47:0431.dt.AddSeconds(1.1).ToString();//2005-11-5 13:47:0532.dt.AddMinutes(1.1).ToString();//2005-11-5 13:48:1033.dt.AddTicks(1000).ToString();//2005-11-5 13:47:04pareTo(dt).ToString();//035.dt.Add(?).ToString();//问号为一个时间段36.dt.Equals("2005-11-6 16:11:04").ToString();//False37.dt.Equals(dt).ToString();//True38.dt.GetHashCode().ToString();//147408823439.dt.GetType().ToString();//System.DateTime40.dt.GetTypeCode().ToString();//DateTime41.42.dt.GetDateTimeFormats('s')[0].ToString();//2005-11-05T14:06:2543.dt.GetDateTimeFormats('t')[0].ToString();//14:0644.dt.GetDateTimeFormats('y')[0].ToString();//2005年11月45.dt.GetDateTimeFormats('D')[0].ToString();//2005年11月5日46.dt.GetDateTimeFormats('D')[1].ToString();//2005 11 0547.dt.GetDateTimeFormats('D')[2].ToString();//星期六2005 11 0548.dt.GetDateTimeFormats('D')[3].ToString();//星期六2005年11月5日49.dt.GetDateTimeFormats('M')[0].ToString();//11月5日50.dt.GetDateTimeFormats('f')[0].ToString();//2005年11月5日14:0651.dt.GetDateTimeFormats('g')[0].ToString();//2005-11-5 14:0652.dt.GetDateTimeFormats('r')[0].ToString();//Sat, 05 Nov 2005 14:06:25 GMT53.54.string.Format("{0:d}",dt);//2005-11-555.string.Format("{0:D}",dt);//2005年11月5日56.string.Format("{0:f}",dt);//2005年11月5日14:2357.string.Format("{0:F}",dt);//2005年11月5日14:23:2358.string.Format("{0:g}",dt);//2005-11-5 14:2359.string.Format("{0:G}",dt);//2005-11-5 14:23:2360.string.Format("{0:M}",dt);//11月5日61.string.Format("{0:R}",dt);//Sat, 05 Nov 2005 14:23:23 GMT62.string.Format("{0:s}",dt);//2005-11-05T14:23:2363.string.Format("{0:t}",dt);//14:2364.string.Format("{0:T}",dt);//14:23:2365.string.Format("{0:u}",dt);//2005-11-05 14:23:23Z66.string.Format("{0:U}",dt);//2005年11月5日6:23:2367.string.Format("{0:Y}",dt);//2005年11月68.string.Format("{0}",dt);//2005-11-5 14:23:2369.string.Format("{0:yyyyMMddHHmmssffff}",dt);70.71.72.// 计算2个日期之间的天数差73.DateTime dt1= Convert.DateTime("2007-8-1");74.DateTime dt2= Convert.DateTime("2007-8-15");75.TimeSpan span= dt2.Subtract(dt1);76.int dayDiff= span.Days+ 1;77.78.// 计算某年某月的天数79.int days= DateTime.DaysInMonth(2007, 8);80.days= 31;81.82.// 给日期增加一天、减少一天83.DateTime dt=DateTime.Now;84.dt.AddDays(1); //增加一天85.dt.AddDays(-1);//减少一天日期格式模式说明d 月中的某一天。
c语言中string用法
c语言中string用法C语言中string的用法在C语言中,string是一个用来存储字符序列的数据类型。
在C语言中并没有内置的string类型,而是通过字符数组来表示字符串。
下面是关于C语言中string 的一些常见用法:1. 字符串声明和初始化要声明一个字符串变量,可以使用字符数组来表示。
例如:```cchar str[20]; // 声明一个可以容纳20个字符的字符串char str[] = "Hello"; // 声明并初始化一个包含字符串"Hello"的字符串```2. 字符串赋值可以使用strcpy函数来将一个字符串赋值给另一个字符串。
例如:```cchar str1[20];char str2[] = "Hello";strcpy(str1, str2); // 将str2复制到str1中```3. 字符串连接可以使用strcat函数来连接两个字符串。
例如:char str1[20] = "Hello";char str2[] = "World";strcat(str1, str2); // 将str2连接到str1的末尾```4. 字符串长度可以使用strlen函数来获取一个字符串的长度。
例如:```cchar str[] = "Hello";int length = strlen(str); // 获取字符串的长度```5. 字符串比较可以使用strcmp函数来比较两个字符串是否相同。
例如:```cchar str1[] = "Hello";char str2[] = "World";int result = strcmp(str1, str2); // 比较str1和str2是否相同,返回0表示相同```6. 字符串截取可以使用strncpy函数来从一个字符串中截取指定长度的子字符串。
c中tostring的用法
c中tostring的⽤法 c中tostring的⽤法的⽤法你知道吗?下⾯⼩编就跟你们详细介绍下c中tostring的⽤法的⽤法,希望对你们有⽤。
c中tostring的⽤法的⽤法如下: C 货币 2.5.ToString("C") ¥2.50 D ⼗进制数 25.ToString("D5") 00025 E 科学型 25000.ToString("E") 2.500000E+005 F 固定点 25.ToString("F2") 25.00 G 常规 2.5.ToString("G") 2.5 数字 2500000.ToString("N") 2,500,000.00 X ⼗六进制 255.ToString("X") FF formatCode 是可选的格式化代码字符串。
(详细内容请搜索"格式化字符串"查看) 必须⽤"{"和"}"将格式与其他字符分开。
如果恰好在格式中也要使⽤⼤括号,可以⽤连续的两个⼤括号表⽰⼀个⼤括号,即: "{{"或者"}}"。
常⽤格式举例: (1) int i=12345; this.textBox1.Text=i.ToString(); //结果 12345(this指当前对象,或叫当前类的实例) this.textBox2.Text=i.ToString("d8"); //结果 00012345 (2) int i=123; double j=123.45; string s1=string.Format("the value is {0,7:d}",i); string s2=string.Format("the value is {0,7:f3}",j); this.textBox1.Text=s1 ; //结果 the value is 123 this.textBox2.Text=s2; //结果 the value is 123.450 (3)double i=12345.6789; this.textBox1.Text=i.ToString("f2"); //结果 12345.68 this.textBox2.Text=i.ToString("f6"); //结果 12345.678900 (4)double i=12345.6789; this.textBox1.Text=i.ToString("n"); //结果 12,345.68 this.textBox2.Text=i.ToString("n4"); //结果 12,345.6789 (5)double i=0.126; string s=string.Format("the value is {0:p}",i); this.textBox1.Text=i.ToString("p"); //结果 12.6% this.textBox2.Text=s; //结果 the value is 12.6% (6) DateTime dt =new DateTime(2003,5,25); this.textBox1.Text=dt.ToString("yy.M.d"); //结果 03.5.25 this.textBox2.Text=dt.ToString("yyyy年M⽉"); //结果 2003年5⽉ Convert.ToDateTime("2005/12/22 22:22:22").ToString("yyyy/MM/dd HH:mm:ss") "2005/12/22 22:22:22" (7) int i=123; double j=123.45; string s=string.Format("i:{0,-7},j:{1,7}",i,j); //-7表⽰左对⻬,占7位 this.textBox1.Text=s ; //结果i:123 ,j: 123.45 DateTime.ToString()⽤法详解 我们经常会遇到对时间进⾏转换,达到不同的显⽰效果,默认格式为:2006-6-6 14:33:34 如果要换成成200606,06-2006,2006-6-6或更多的格式该怎么办呢? 这⾥将要⽤到:DateTime.ToString的⽅法(String, IFormatProvider) ⽰例: using System; using System.Globalization; String format="D"; DateTime date=DataTime.Now; Response.Write(date.ToString(format, DateTimeFormatInfo.InvariantInfo)); 结果输出 Thursday, June 16, 2006 在这⾥列出了参数format格式详细⽤法 ======================= 格式字符关联属性/说明 d ShortDatePattern D LongDatePattern f 完整⽇期和时间(⻓⽇期和短时间) F FullDateTimePattern(⻓⽇期和⻓时间) g 常规(短⽇期和短时间) G 常规(短⽇期和⻓时间) m、M MonthDayPattern r、R RFC1123Pattern s 使⽤当地时间的 SortableDateTimePattern(基于 ISO 8601) t ShortTimePattern T LongTimePattern u UniversalSortableDateTimePattern ⽤于显⽰通⽤时间的格式 U 使⽤通⽤时间的完整⽇期和时间(⻓⽇期和⻓时间) y、Y YearMonthPattern 下表列出了可被合并以构造⾃定义模式的模式 ======================================== 这些模式是区分⼤⼩写的;例如,识别"MM",但不识别"mm"。
C++string比较
C++string⽐较传统的c字符串⽐较必须⽤strcmp函数:(不能⽤==,否则⽐较的只是两个地址)函数名: strcmp功能: 串⽐较⽤法: int strcmp(char *str1, char *str2);看Asic码,str1>str2,返回值 > 0;两串相等,返回0上⾯的头⽂件为<string.h> strncasecmp()是忽略⼤⼩写的。
c++ string 类型的⽐较可以⽤string的函数compare()int compare ( const string& str ) const;int compare ( const char* s ) const;或直接⽤==⽐较// ⽐较两个字符串⽐较规则同 c字符串⽐较规则string str7, str8;cout << "输⼊字符串 str7, str8 , 中间⽤空格格开" << endl;cin >> str7 >> str8;if( str7< str8 ) cout << str7 << " ⼩于 " << str8 << endl;else if( str7> str8 ) cout << str7 << " ⼤于 " << str8 << endl;else cout << str7 << " 等于 " << str8 << endl;可以直接把string类型和c字符串类型⽐较:string s("abc");s=="abc" //true,此时C风格字符串可以转换为string类型的,。
C中的String.Format的用法
C#中的St ring.Forma t的用法 2007-10-25 22:54{0:d}YY-MM-DD{0:p}百分比00.00%{0:N2} 12.68{0:N0} 13{0:c2} $12.68{0:d} 3/23/2003{0:T} 12:00:00 AM{0:男;;女}Da taGri d-数据格式设置表达式数据格式设置表达式.NET Fram ework格式设置表达式,它在数据显示在列中之前先应用于数据。
此表达式由可选静态文本和用以下格式表示的格式说明符组成:{0:form at sp ecifi er}零是参数索引,它指示列中要格式化的数据元素;因此,通常用零来指示第一个(且唯一的)元素。
f ormat spec ifier前面有一个冒号(:),它由一个或多个字母组成,指示如何格式化数据。
可以使用的格式说明符取决于要格式化的数据类型:日期、数字或其他类型。
下表显示了不同数据类型的格式设置表达式的示例。
有关格式设置表达式的更多信息,请参见格式化类型。
格式设置表达式应用于此数据类型说明P rice: {0:C}nu meric/deci mal显示“Pr ice:”,后跟以货币格式表示的数字。
货币格式取决于通过P age 指令或We b.con fig 文件中的区域性属性指定的区域性设置。
{0:D4}in teger(不能和小数一起使用。
)在由零填充的四个字符宽的字段中显示整数。
{0:N2}%num eric显示精确到小数点后两位的数字,后跟“%”。
{0:000.0}nume ric/d ecima l四舍五入到小数点后一位的数字。
C++中LIST和String用法
1.c++中的list用法#include <iostream>#include <list>#include <numeric>#include <algorithm>using namespace std;//创建一个list容器的实例LISTINTtypedef list<int> LISTINT;//创建一个list容器的实例LISTCHARtypedef list<int> LISTCHAR;void main(void){//--------------------------//用list容器处理整型数据//--------------------------//用LISTINT创建一个名为listOne的list对象LISTINT listOne;//声明i为迭代器LISTINT::iterator i;//从前面向listOne容器中添加数据listOne.push_front (2);listOne.push_front (1);//从后面向listOne容器中添加数据listOne.push_back (3);listOne.push_back (4);//从前向后显示listOne中的数据cout<<"listOne.begin()--- listOne.end():"<<endl;for (i = listOne.begin(); i != listOne.end(); ++i)cout<< *i << " ";cout<<endl;//从后向后显示listOne中的数据LISTINT::reverse_iteratorir;cout<<"listOne.rbegin()---listOne.rend():"<<endl;for (ir =listOne.rbegin(); ir!=listOne.rend();ir++) {cout<< *ir<< " ";}cout<<endl;//使用STL的accumulate(累加)算法int result = accumulate(listOne.begin(), listOne.end(),0);cout<<"Sum="<<result<<endl;cout<<"------------------"<<endl;//--------------------------//用list容器处理字符型数据//--------------------------//用LISTCHAR创建一个名为listOne的list对象LISTCHAR listTwo;//声明i为迭代器LISTCHAR::iterator j;//从前面向listTwo容器中添加数据listTwo.push_front ('A');listTwo.push_front ('B');//从后面向listTwo容器中添加数据listTwo.push_back ('x');listTwo.push_back ('y');//从前向后显示listTwo中的数据cout<<"listTwo.begin()---listTwo.end():"<<endl;for (j = listTwo.begin(); j != listTwo.end(); ++j)cout<< char(*j) << " ";cout<<endl;//使用STL的max_element算法求listTwo中的最大元素并显示j=max_element(listTwo.begin(),listTwo.end());cout<< "The maximum element in listTwo is: "<<char(*j)<<endl;}#include <iostream>#include <list>using namespace std;typedef list<int> INTLIST;//从前向后显示list队列的全部元素voidput_list(INTLIST list, char *name){INTLIST::iterator plist;cout<< "The contents of " << name << " : ";for(plist = list.begin(); plist != list.end(); plist++)cout<< *plist<< " ";cout<<endl;}//测试list容器的功能void main(void){//list1对象初始为空INTLIST list1;//list2对象最初有10个值为6的元素INTLIST list2(10,6);//list3对象最初有3个值为6的元素INTLIST list3(list2.begin(),--list2.end());//声明一个名为i的双向迭代器INTLIST::iterator i;//从前向后显示各list对象的元素put_list(list1,"list1");put_list(list2,"list2");put_list(list3,"list3");//从list1序列后面添加两个元素list1.push_back(2);list1.push_back(4);cout<<"list1.push_back(2) and list1.push_back(4):"<<endl; put_list(list1,"list1");//从list1序列前面添加两个元素list1.push_front(5);list1.push_front(7);cout<<"list1.push_front(5) and list1.push_front(7):"<<endl; put_list(list1,"list1");//在list1序列中间插入数据list1.insert(++list1.begin(),3,9);cout<<"list1.insert(list1.begin()+1,3,9):"<<endl;put_list(list1,"list1");//测试引用类函数cout<<"list1.front()="<<list1.front()<<endl;cout<<"list1.back()="<<list1.back()<<endl;//从list1序列的前后各移去一个元素list1.pop_front();list1.pop_back();cout<<"list1.pop_front() and list1.pop_back():"<<endl;put_list(list1,"list1");//清除list1中的第2个元素list1.erase(++list1.begin());cout<<"list1.erase(++list1.begin()):"<<endl;put_list(list1,"list1");//对list2赋值并显示list2.assign(8,1);cout<<"list2.assign(8,1):"<<endl;put_list(list2,"list2");//显示序列的状态信息cout<<"list1.max_size(): "<<list1.max_size()<<endl;cout<<"list1.size(): "<<list1.size()<<endl;cout<<"list1.empty(): "<<list1.empty()<<endl;//list序列容器的运算put_list(list1,"list1");put_list(list3,"list3");cout<<"list1>list3: "<<(list1>list3)<<endl;cout<<"list1<list3: "<<(list1<list3)<<endl;//对list1容器排序list1.sort();put_list(list1,"list1");//结合处理list1.splice(++list1.begin(), list3);put_list(list1,"list1");put_list(list3,"list3");}2.标准C++中的string类的用法总结相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。
我们可以用 = 进行赋值操作,==进行比较,+ 做串联(是不是很简单?)。
我们尽可以把它看成是C++的基本数据类型。
首先,为了在我们的程序中使用string类型,我们必须包含头文件 <string>。
如下:#include <string> //注意这里不是string.h string.h是C字符串头文件1.声明一个C++字符串声明一个字符串变量很简单:string Str;这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。
上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str 初始化为一个空字符串。
String类的构造函数和析构函数如下:a) string s; //生成一个空字符串sb) string s(str) //拷贝构造函数生成str的复制品c) string s(str,stridx) //将字符串str内"始于位置stridx"的部分当作字符串的初值d) string s(str,stridx,strlen) //将字符串str内"始于stridx且长度顶多strlen"的部分作为字符串的初值e) string s(cstr) //将C字符串作为s的初值f) string s(chars,chars_len) //将C字符串前chars_len个字符作为字符串s的初值。
g) string s(num,c) //生成一个字符串,包含num个c字符h) string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值i) s.~string() //销毁所有字符,释放内存都很简单,我就不解释了。
2.字符串操作函数这里是C++字符串的重点,我先把各种操作函数罗列出来,不喜欢把所有函数都看完的人可以在这里找自己喜欢的函数,再到后面看他的详细解释。
a) =,assign() //赋以新值b) swap() //交换两个字符串的内容c) +=,append(),push_back() //在尾部添加字符d) insert() //插入字符e) erase() //删除字符f) clear() //删除全部字符g) replace() //替换字符h) + //串联字符串i) ==,!=,<,<=,>,>=,compare() //比较字符串j) size(),length() //返回字符数量k) max_size() //返回字符的可能最大个数l) empty() //判断字符串是否为空m) capacity() //返回重新分配之前的字符容量n) reserve() //保留一定量内存以容纳一定数量的字符o) [ ], at() //存取单一字符p) >>,getline() //从stream读取某值q) << //将谋值写入streamr) copy() //将某值赋值为一个C_strings) c_str() //将内容以C_string返回t) data() //将内容以字符数组形式返回u) substr() //返回某个子字符串v)查找函数w)begin() end() //提供类似STL的迭代器支持x) rbegin() rend() //逆向迭代器y) get_allocator() //返回配置器下面详细介绍:2.1 C++字符串和C字符串的转换C++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy(),其中,data()以字符数组的形式返回字符串内容,但并不添加’\0’。
c_str()返回一个以‘\0’结尾的字符数组,而copy()则把字符串的内容复制或写入既有的c_string或字符数组内。
C++字符串并不以’\0’结尾。
我的建议是在程序中能使用C++字符串就使用,除非万不得已不选用c_string。
由于只是简单介绍,详细介绍掠过,谁想进一步了解使用中的注意事项可以给我留言(到我的收件箱)。
我详细解释。
2.2 大小和容量函数一个C++字符串存在三种大小:a)现有的字符数,函数是size()和length(),他们等效。
Empty()用来检查字符串是否为空。
b)max_size()这个大小是指当前C++字符串最多能包含的字符数,很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。
我们一般情况下不用关心他,应该大小足够我们用的。
但是不够用的话,会抛出length_error异常c)capacity()重新分配内存之前string所能包含的最大字符数。
这里另一个需要指出的是reserve()函数,这个函数为string 重新分配内存。
重新分配的大小由其参数决定,默认参数为0,这时候会对string进行非强制性缩减。
还有必要再重复一下C++字符串和C字符串转换的问题,许多人会遇到这样的问题,自己做的程序要调用别人的函数、类什么的(比如数据库连接函数Connect(char*,char*)),但别人的函数参数用的是char*形式的,而我们知道,c_str()、data()返回的字符数组由该字符串拥有,所以是一种constchar*,要想作为上面提及的函数的参数,还必须拷贝到一个char*,而我们的原则是能不使用C 字符串就不使用。
那么,这时候我们的处理方式是:如果此函数对参数(也就是char*)的内容不修改的话,我们可以这样Connect((char*)UserID.c_str(), (char*)PassWD.c_str()),但是这时候是存在危险的,因为这样转换后的字符串其实是可以修改的(有兴趣地可以自己试一试),所以我强调除非函数调用的时候不对参数进行修改,否则必须拷贝到一个char*上去。
当然,更稳妥的办法是无论什么情况都拷贝到一个char*上去。
同时我们也祈祷现在仍然使用C字符串进行编程的高手们(说他们是高手一点儿也不为过,也许在我们还穿开裆裤的时候他们就开始编程了,哈哈…)写的函数都比较规范,那样我们就不必进行强制转换了。
2.3元素存取我们可以使用下标操作符[]和函数at()对元素包含的字符进行访问。
但是应该注意的是操作符[]并不检查索引是否有效(有效索引0~str.length()),如果索引失效,会引起未定义的行为。
而at()会检查,如果使用at()的时候索引无效,会抛出out_of_range异常。
有一个例外不得不说,const stringa;的操作符[]对索引值是a.length()仍然有效,其返回值是’\0’。
其他的各种情况,a.length()索引都是无效的。
举例如下:const string Cstr("const string");string Str("string");Str[3]; //okStr.at(3); //okStr[100]; //未定义的行为Str.at(100); //throw out_of_rangeStr[Str.length()] //未定义行为Cstr[Cstr.length()] //返回‘\0’Str.at(Str.length());//throw out_of_rangeCstr.at(Cstr.length()) ////throw out_of_range我不赞成类似于下面的引用或指针赋值:char& r=s[2];char* p= &s[3];因为一旦发生重新分配,r,p立即失效。
避免的方法就是不使用。
2.4比较函数C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如str<"hello")。
在使用>,>=,<,<=这些操作符的时候是根据"当前字符特性"将字符按字典顺序进行逐一得比较。
字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。
同时,string("aaaa") <string(aaaaa)。
另一个功能强大的比较函数是成员函数compare()。
他支持多参数处理,支持用索引值和长度定位子串来进行比较。
他返回一个整数来表示比较结果,返回值意义如下:0-相等〉0-大于 <0-小于。
举例如下:string s("abcd");pare("abcd"); //返回0pare("dcba"); //返回一个小于0的值pare("ab"); //返回大于0的值pare(s); //相等pare(0,2,s,2,2); //用"ab"和"cd"进行比较小于零pare(1,2,"bcx",2); //用"bc"和"bc"比较。
怎么样?功能够全的吧!什么?还不能满足你的胃口?好吧,那等着,后面有更个性化的比较算法。
先给个提示,使用的是STL的比较算法。
什么?对STL一窍不通?靠,你重修吧!2.5 更改内容这在字符串的操作中占了很大一部分。
首先讲赋值,第一个赋值方法当然是使用操作符=,新值可以是string(如:s=ns)、c_string(如:s="gaint")甚至单一字符(如:s=’j’)。
还可以使用成员函数assign(),这个成员函数可以使你更灵活的对字符串赋值。
还是举例说明吧:s.assign(str); //不说s.assign(str,1,3);//如果str是"iamangel" 就是把"ama"赋给字符串s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给ss.assign("gaint"); //不说s.assign("nico",5);//把’n’‘I’‘c’‘o’‘\0’赋给字符串s.assign(5,’x’);//把五个x赋给字符串把字符串清空的方法有三个:s="";s.clear();s.erase();(我越来越觉得举例比说话让别人容易懂!)。