C++中字符串类的string
在C++中字符串类的string的模板原型是basic_string
template<class_Elem,class traits=char_traits<_Elem>,class_Ax=allocator<_Elem>>
class basic_string{};
第一个参数_Elem表示类型。
第二个参数traits的缺省值使用char_traits类型,定义了类型和字符操作的函数,如比较、等价、分配等。
第三个参数_Ax的默认值是allocator类,表示了内存模式,不同的内存结构将操作指针的不同行为,例如栈、堆或段内存模式等。
在C++标准里定义了两个字符串string和wstring
typedef basic_string<char>string;
typedef basic_string<wchar_t>wstring;
前者string是常用类型,可以看作char[],其实这正是与string定义中的_Elem=char相一致。
而wstring,使用的是wchar_t类型,这是宽字符,用于满足非ASCII字符的要求,例如Unicode编码,中文,日文,韩文什么的。
对于wchar_t类型,实际上C++中都用与char函数相对应的wchar_t的函数,因为他们都是从同一个模板类似于上面的方式定义的。
因此也有wcout,wcin,werr等函数。
实际上string也可以使用中文,但是它将一个汉字写在2个char中。
而如果将一个汉字看作一个单位wchar_t的话,那么在wstring中就只占用一个单元,其它的非英文文字和编码也是如此。
这样才真正的满足字符串操作的要求,尤其是国际化等工作。
看一下下面的程序,就会理解两者的差别。
#include<iostream>
#include<string>
using namespace std;
#define tab"\t"
int main()
{
locale def;
cout<<()<<endl;
locale current=cout.getloc();
cout<<()<<endl;
float val=1234.56;
cout<<val<<endl;
//chage to french/france
cout.imbue(locale("chs"));
current=cout.getloc();
cout<<()<<endl;
cout<<val<<endl;
//上面是说明locale的用法,下面才是本例的内容,因为其中用到了imbue函数
cout<<"*********************************"<<endl;
//为了保证本地化输出(文字/时间/货币等),chs表示中国,wcout必须使用本地化解析编码wcout.imbue(std::locale("chs"));
//string英文,正确颠倒位置,显示第二个字符正确
string str1("ABCabc");
string str11(str1.rbegin(),str1.rend());
cout<<"UK\ts1\t:"<<str1<<tab<<str1[1]<<tab<<str11<<endl;
//wstring英文,正确颠倒位置,显示第二个字符正确
wstring str2=L"ABCabc";
wstring str22(str2.rbegin(),str2.rend());
wcout<<"UK\tws4\t:"<<str2<<tab<<str2[1]<<tab<<str22<<endl;
//string中文,颠倒后,变成乱码,第二个字符读取也错误
string str3("你好么?");
string str33(str3.rbegin(),str3.rend());
cout<<"CHN\ts3\t:"<<str3<<tab<<str3[1]<<tab<<str33<<endl;
//正确的打印第二个字符的方法
cout<<"CHN\ts3\t:RIGHT\t"<<str3[2]<<str3[3]<<endl;
//中文,正确颠倒位置,显示第二个字符正确
wstring str4=L"你好么?";
wstring str44(str4.rbegin(),str4.rend());
wcout<<"CHN\tws4\t:"<<str4<<tab<<str4[1]<<tab<<str44<<endl;
wstring str5(str1.begin(),str1.end());//只有char类型的string时才可以如此构造
wstring str55(str5.rbegin(),str5.rend());
wcout<<"CHN\tws5\t:"<<str5<<tab<<str5[1]<<tab<<str55<<endl;
wstring str6(str3.begin(),str3.end());//如此构造将失败!!!!
wstring str66(str6.rbegin(),str6.rend());
wcout<<"CHN\tws6\t:"<<str6<<tab<<str6[1]<<tab<<str66<<endl;
return0;
}
结果如下:
上面显示了本地化的作用,是在数字中每三位加一个逗号,其实对时间/文字等都是用影响的。
下面的输出说明了,如何正确使用string和wstring的方法。
第三个因为使用string来表示汉字,出现了一些错误。
最后一行也是错误,导致了输出也受到了影响,没有空格与回车。
(最后两个就不要管中英文了,仅仅说明一下中文构造方法是错误的)
《掌握标准C++类》在第十二章《语言支持》中专门讲C++的国际化和本地化问题,C++提供了I18N 的标准处理,软件开发者可以参考。
C++标准库还是非常博大精深的,功能比较齐全的。
继续学习。
C语言字符串函数大全
今天总结了下C语言字符串函数。
C语言字符串函数总结:1.字符处理库(ctype)中的函数2.stdio中的字符串和字符输入/输出的函数3.通用实用库stdlib中的字符串转换函数4.字符串处理库string中的字符串处理函数C语言的字符串实际上是存储单个字符的数组,结尾包含一个结束该字符串的特别的字符("空字符",用'\0'表示)。
char string1[]="first"实际上有6个元素。
char color="blue" char * p="blue"注意p[i]不能修改,若需修改应用字符数组。
一、.字符处理库(ctype)中的函数#include<ctype.h>函数原型:int f(int c)isdigit, isalpha, isalnum, isxdigit, islower, isupper, tolower, toupper, isspace,空白字符:新行符\n, 空格,回车''\r",水平制表符"\t", 垂直制表符"\v" isctrl, ispunct, isprint, isalpha二、stdio中的字符串和字符输入/输出的函数int getchar(void) 从标准输入设备读取字符以整数返回char * get(char * s) 从标准输入设备读入字符到数组s直到遇到新行符和文件结束符为止,然后再数组后追加NULL字符int putchar(int c) 打印字符int puts(const char * s) 打印字符串s和新行符int sprintf(char * s, const char * format) 与printf区别在于输出结果存放在s中int sscanf(char * s, const char * format); 与scanf区别在于从数组s读取数据示例1 字符串反转#include <stdio.h> void reverse(char *s) {if(s[0] == '\0') return;else{reverse(&s[1]); putchar(s[0]);}}int main(){char s[100];gets(s);reverse(s);return 0;}输入:sf输出:fs示例2 sscanf和sprintf #include<stdio.h>int main(){int x=1;double y=2.1;char s[100];sprintf(s,"Hello!%d, %f", x, y);puts(s);sscanf(s,"%d%f",&x,&y);printf("x:%d, y:%f", x, y);return 0;}输出:Hello!1, 2.100000x:1, y:2.100000三、stdlib中的字符串转换函数#include<stdlib.h>1. atoi(将字符串转换成整型数)定义函数int atoi(const char *nptr); 函数说明atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。
stdstring用法总结
stdstring用法总结std::string是C++标准库中的一个类,用于表示和处理字符串。
它提供了一系列的方法和功能,使得字符串的处理更加方便和高效。
下面是std::string的用法总结:1.创建字符串- 使用构造函数:std::string str("hello world");- 使用赋值操作符:std::string str = "hello world";- 使用拷贝构造函数:std::string str2(str);2.基本操作- 获取字符串长度:str.length( 或 str.size- 判断字符串是否为空:str.empty- 清空字符串内容:str.clear- 访问字符串中的字符:str[index] 或 str.at(index)- 修改字符串中的字符:str[index] = 'c' 或 str.at(index) = 'c'- 获取字符串的子串:str.substr(start, length)- 追加字符串:str.append("world")- 插入字符串:str.insert(index, "hello")3.字符串的比较4.字符串的查找和替换- 查找一些字符首次出现的位置:str.find('c')- 查找一些字符串首次出现的位置:str.find("hello")- 替换字符串中的一些字符:str.replace(index, 1, "c")- 替换字符串中的一些子串:str.replace(start, length, "world")5.字符串的拼接和分割- 字符串拼接:str1 + str2 或 str1.append(str2)- 字符串分割为子串:使用std::stringstream或std::istringstream进行分割6.字符串的遍历- 使用for循环遍历字符串中的每个字符-使用迭代器遍历字符串中的每个字符:```for (auto it = str.begin(; it != str.end(; ++it)//处理当前字符}```7.字符串中的转换- 将字符串转为整数类型:std::stoi(str)- 将字符串转为浮点类型:std::stof(str)- 将整数转为字符串:std::to_string(num)8. C风格字符串与std::string的转换- C风格字符串转为std::string:std::string str(cstr)- std::string转为C风格字符串:str.c_str9.字符串的性能优化-避免频繁的字符串拼接,尽量使用字符流操作- 使用reserve函数预先分配足够的内存空间-使用迭代器代替下标访问字符串中的字符,以提高性能总结:std::string提供了丰富实用的方法和功能,用于处理和操作字符串。
c 中string的用法
在 C 语言中,字符串(String)实际上是一个字符数组,以 null 字符('\0')结尾。
C 中没有专门的字符串类型,而是使用字符数组来表示字符串。
以下是一些常见的C 中字符串的用法:
字符数组声明和初始化:
字符串输入和输出:
字符串函数:
C 标准库提供了许多用于处理字符串的函数,这些函数定义在string.h头文件中。
以下是一些常见的字符串函数:
•strlen:计算字符串的长度。
•strcpy 和 strncpy:复制字符串。
•strcat 和 strncat:连接字符串。
这只是 C 语言中字符串的基础用法。
需要注意的是,C 中的字符串是以 null 字符结尾的字符数组,因此在操作字符串时需要确保数组足够大以容纳字符串及其 null 字符。
此外,使用字符串函数时要注意数组边界,以防止缓冲区溢出。
c++中的string常用函数用法总结
c++中的string常⽤函数⽤法总结标准c++中string类函数介绍之所以抛弃char*的字符串⽽选⽤C++标准程序库中的string类,是因为他和前者⽐较起来,不必担⼼内存是否⾜够、字符串长度等等,⽽且作为⼀个类出现,他集成的操作函数⾜以完成我们⼤多数情况下(甚⾄是100%)的需要。
我们可以⽤ = 进⾏赋值操作,== 进⾏⽐较,+ 做串联(是不是很简单?)。
我们尽可以把它看成是C++的基本数据类型。
好了,进⼊正题………⾸先,为了在我们的程序中使⽤string类型,我们必须包含头⽂件 <string>。
如下:#include <string> //注意这⾥不是string.h string.h是C字符串头⽂件#include <string>using namespace std;声明⼀个字符串变量很简单: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() //销毁所有字符,释放内存都很简单,我就不解释了。
c语言 string类型
c语言 string类型string类型是C语言中一种非常重要的数据类型,用于表示字符串。
字符串是指由一连串字符所组成的序列,是C语言编程中非常常见的数据类型。
本文将以“C语言 string类型”为主题,分步骤阐述相关概念和应用。
一、什么是string类型?string类型是C语言中预定义的数据类型之一,用于表示由一定数量的字符所组成的字符串。
它是通过在字符数组末尾追加一个空字符来实现的,因此也称为“以空字符结尾的字符数组”(null-terminated character array)。
二、常见操作1.声明string类型变量声明string类型变量的方式与声明其他数据类型的变量的方式相同,可以通过指定变量名和数据类型来实现。
例如:char str[20];2.初始化string类型变量初始化string类型变量可以通过赋值操作实现,即将一个字符串常量赋值给该变量。
例如:char str[20] = "Hello";3.向string类型变量中添加新的字符向string类型变量中添加新的字符可以通过在指定位置上插入该字符来实现。
例如:str[5] = 'W';4.连接两个string类型变量连接两个string类型变量可以使用C标准库中的strcat函数实现。
例如:char str1[20] = "Hello";char str2[20] = "World";strcat(str1, str2);5.字符串比较C语言中提供了strcmp函数用于比较两个字符串是否相等。
例如:if (strcmp(str1, str2) == 0) {printf("The two strings are equal.\n");} else {printf("The two strings are not equal.\n");}三、常见问题1. string类型变量的长度有何限制?由于每个字符占用一个字节的存储空间,因此string类型变量的长度最多只能为65535个字符。
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异常,下标运算符[]不提供检查访问。
string类型c语言
string类型c语言string类型是C语言中一种非常重要的数据类型,用于表示一串字符。
在C语言中,字符串是由字符数组组成的,每个字符都占用一个字节的空间。
字符串以'\0'(空字符)作为结尾,因此在使用字符串时需要注意字符串的长度。
在C语言中,我们可以使用一些函数来操作字符串。
例如,strlen()函数用于计算字符串的长度,strcpy()函数用于将一个字符串复制到另一个字符串,strcat()函数用于将一个字符串追加到另一个字符串的末尾,strcmp()函数用于比较两个字符串是否相等等等。
字符串类型在C语言中的应用非常广泛。
我们可以使用字符串类型来存储和处理各种文本数据,比如用户输入的姓名、地址、电话号码等。
此外,字符串类型还可以用来表示文件路径、URL地址等。
在使用字符串类型时,我们需要注意以下几点:1. 字符串的长度是有限的,需要确保存储字符串的字符数组足够大,以防止溢出。
2. 字符串是不可变的,一旦创建就不能修改。
如果需要修改字符串,可以先将其复制到一个新的字符数组中,然后进行修改。
3. 字符串操作函数可能会产生缓冲区溢出等安全问题,因此在使用这些函数时需要谨慎,确保输入的数据不会超出字符数组的长度。
除了以上注意事项,我们还可以通过一些方法来提高字符串的处理效率。
例如,可以使用指针来遍历字符串,而不是通过下标来访问字符数组中的每个元素。
此外,可以使用字符串处理函数来简化代码,提高代码的可读性和可维护性。
总结来说,字符串类型是C语言中非常重要的数据类型,广泛应用于各种文本数据的存储和处理。
在使用字符串类型时,我们需要注意字符串的长度和安全性,并且可以通过一些方法来提高字符串的处理效率。
希望本文对读者对字符串类型的理解和应用有所帮助。
C语言程序之C++的字符串
C语言程序之C++的字符串C++ 字符串C++ 提供了以下两种类型的字符串表示形式:▪ C 风格字符串▪C++ 引入的string 类类型C 风格字符串C 风格的字符串起源于C 语言,并在C++ 中继续得到支持。
字符串实际上是使用null字符'' 终止的一维字符数组。
因此,一个以null 结尾的字符串,包含了组成字符串的字符。
下面的声明和初始化创建了一个"Hello" 字符串。
由于在数组的末尾存储了空字符,所以字符数组的大小比单词"Hello" 的字符数多一个。
char greeting[6] = {'H', 'e', 'l', 'l', 'o', ''};依据数组初始化规则,您可以把上面的语句写成以下语句:char greeting[] = "Hello";以下是C/C++ 中定义的字符串的内存表示:下面的实例使用了上述的一些函数:实例#include<iostream>#include<cstring>usingnamespacestd;intmain(){charstr1[11] = "Hello"; charstr2[11] = "World"; charstr3[11]; intlen ; // 复制str1 到str3strcpy(str3, str1); cout<< "strcpy( str3, str1) : " << str3 <<endl; // 连接str1 和str2strcat(str1, str2); cout<< "strcat( str1, str2): " << str1 <<endl; // 连接后,str1 的总长度len = strlen(str1); cout<< "strlen(str1) : " <<len<<endl; return0;}当上面的代码被编译和执行时,它会产生下列结果:strcpy( str3, str1) : Hellostrcat( str1, str2):HelloWorldstrlen(str1) : 10C++ 中的String 类C++ 标准库提供了string类类型,支持上述所有的操作,另外还增加了其他更多的功能。
C++中string,wstring,CString常用方法
C++中string,wstring,CString常⽤⽅法⼀.概念 string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳⼊C++标准之中.wstring是操作宽字符串的类.C++标准程序库对于string的设计思维就是让他的⾏为尽可能像基本类型,不会在操作上引起什么⿇烦。
CString是对string(字符串)和wstring(宽字符串)的⼀个封装,常⽤在mfc中.⽤来解决编码问题的. string/wstring和CString在使⽤中,要根据实际环境选取。
CString是MFC⾥的,string是STL⾥的,后者通⽤性强些,前者功能全些。
⼀般在mfc中使⽤CString更为好⼀些。
⼆.常⽤⽅法string/wstring常⽤⽅法:string类的构造函数:string(const char *s); //⽤const字符串s初始化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异常,下标运算符[]不提供检查访问。
const char *data()const;//返回⼀个⾮null终⽌的c字符数组const char *c_str()const;//返回⼀个以null终⽌的c字符串int copy(char *s, int n, int pos = 0) const;//把当前串中以pos开始的n个字符拷贝到以s为起始位置的字符数组中,返回实际拷贝的数⽬string的特性描述:int capacity()const; //返回当前容量(即string中不必增加内存即可存放的元素个数)int max_size()const; //返回string对象中可存放的最⼤字符串的长度int size()const; //返回当前字符串的⼤⼩int length()const; //返回当前字符串的长度bool empty()const; //当前字符串是否为空void resize(int len,char c);//把字符串当前⼤⼩置为len,并⽤字符c填充不⾜的部分string类的输⼊输出操作:string类重载运算符operator>>⽤于输⼊,同样重载运算符operator<<⽤于输出操作。
visual studio的string
visual studio的stringVisual Studio 是微软推出的一个开发工具集成环境(IDE),强大且功能全面,被广泛地应用于软件开发和其他应用程序开发领域。
其中,string 字符串类型是 Visual Studio 中常用的数据类型之一。
下面将介绍 string 的定义、特点以及在 Visual Studio 中的应用。
1. string 的定义在 C++ 语言中,string 是一种表示字符串的数据类型,它被定义在<string> 头文件中。
string 类型使用一个字符数组来存储字符串,可以通过操作字符数组中的元素来实现对字符串的控制。
在使用时,需要使用 std::string 或 using namespace std 告诉编译器使用 string数据类型。
2. string 的特点string 类型在编程中具有以下特点:(1)可变长度:string 类型中的字符串长度可以动态地调整,在程序运行期间可以根据需要修改字符串长度。
(2)任意字符:在 string 类型中,可以存储任意类型的字符,包括汉字、拉丁字母、数字、标点符号等。
(3)易于操作:string 类型提供了多种操作函数,如 append()、insert()、erase() 等,方便进行字符串的插入、删除等操作。
(4)与 C 语言兼容:string 类型也支持与 C 语言字符串的转换,可以方便地在 C++ 代码中使用 C 语言的字符串函数。
3. string 在 Visual Studio 中的应用在 Visual Studio 编程中,string 类型广泛应用于各种程序设计中。
例如,在编写控制台应用程序时,可以使用 string 类型的变量来存储用户输入的字符串,通过对字符串操作实现程序的功能。
在 GUI 应用程序中,string 类型可以方便地处理文本框中的输入,以及实现各种字符串操作。
此外,string 类型也常用于网络编程和文件读写等场景中。
