C++中string的用法
c++ u8string 用法
c++ u8string 用法==========概述--本篇文档将详细介绍 C U8string 的用法。
C U8string 是一个用于处理Unicode 字符串的数据类型,支持 UTF-8 编码。
它在 C 语言中广泛应用,可以方便地处理各种国际字符。
基本语法----C U8string 的声明如下:```c#include <u8string.h>// 创建一个空字符串U8String u8 = U8StringCreate();// 从字符串中拷贝字符U8StringSet(u8, "你好,世界!");// 获取字符串长度size_t len = U8StringLength(u8);```功能介绍----C U8string 支持以下主要功能:1. 创建和销毁字符串:使用 `U8StringCreate()` 和 `U8StringDelete()` 函数创建和销毁字符串。
2. 拷贝字符串:使用 `U8StringSet()` 函数将一个字符串的字符拷贝到另一个字符串。
3. 获取字符串长度:使用 `U8StringLength()` 函数获取字符串的长度。
4. 查找和替换字符:使用 `U8StringFind()` 和 `U8StringReplace()` 函数查找和替换字符串中的字符。
5. 比较字符串:使用 `U8StringCompare()` 函数比较两个字符串的大小关系。
6. 格式化字符串:使用 `U8Sprintf()` 和 `U8Sscanf()` 函数进行格式化输入和输出。
7. 处理字符串中的字符编码:支持 UTF-8 编码,可以处理各种国际字符。
示例代码----下面是一个简单的示例代码,展示了如何使用 C U8string:```c#include <stdio.h>#include <u8string.h>int main() {// 创建一个空字符串U8String u8 = U8StringCreate();// 从字符串中拷贝字符到当前字符串中U8StringSet(u8, "你好,世界!");// 输出字符串长度printf("字符串长度: %zu\n", U8StringLength(u8));// 销毁字符串对象U8StringDelete(u8);return 0;}```注意事项----在使用 C U8string 时,需要注意以下几点:1. 确保编译器支持 C99 或更高版本的 C 标准,以便支持 UTF-8 编码和U8string 数据类型。
c中string函数库常用函数
c中string函数库常用函数C语言中的string函数库是一个非常重要的函数库,它包含了许多常用的字符串处理函数。
这些函数可以帮助我们更加方便地处理字符串,提高我们的编程效率。
在本文中,我们将介绍一些常用的string函数库函数。
1. strlen函数strlen函数用于计算字符串的长度,它的原型如下:size_t strlen(const char *s);其中,s是要计算长度的字符串。
该函数返回字符串s的长度,不包括字符串末尾的空字符。
2. strcpy函数strcpy函数用于将一个字符串复制到另一个字符串中,它的原型如下:char *strcpy(char *dest, const char *src);其中,dest是目标字符串,src是源字符串。
该函数将源字符串src 复制到目标字符串dest中,并返回目标字符串dest的指针。
3. strcat函数strcat函数用于将一个字符串连接到另一个字符串的末尾,它的原型如下:char *strcat(char *dest, const char *src);其中,dest是目标字符串,src是要连接的字符串。
该函数将源字符串src连接到目标字符串dest的末尾,并返回目标字符串dest的指针。
4. strcmp函数strcmp函数用于比较两个字符串是否相等,它的原型如下:int strcmp(const char *s1, const char *s2);其中,s1和s2是要比较的两个字符串。
该函数返回一个整数值,如果s1和s2相等,则返回0;如果s1小于s2,则返回一个负数;如果s1大于s2,则返回一个正数。
5. strchr函数strchr函数用于在一个字符串中查找一个字符,它的原型如下:char *strchr(const char *s, int c);其中,s是要查找的字符串,c是要查找的字符。
该函数返回一个指向第一个匹配字符的指针,如果没有找到匹配字符,则返回NULL。
string的常用库函数(主要摘自谭浩强版C语言教材)
string的常⽤库函数(主要摘⾃谭浩强版C语⾔教材)这⾥对C程序设计第五版(谭浩强)的⼀些string常⽤库函数在此总结以下,以便记忆同时注意提醒⾃⼰以下,字符串通常是⽤双引号,⽽单⼀的⼀个字符⽤单引号1.puts函数常⽤形式:puts(字符数组) ——————输出字符数组/字符串puts(str);2.gets函数常⽤形式:gets(字符数组)——————输⼊字符串,通常⽤于输⼊字符数组gets(str);3.strcat函数常⽤形式:strcat(字符数组1,字符数组2)——————把两个字符数组中的字符串连接起来,把字符数组1和字符数组2中的字符串连接之后,放在字符数组1中,调⽤之后的结果是字符数组1的地址。
也就是新得到的字符数组1中的字符串是原字符数组1和字符数组2中字符串的结合。
strcat(str1,str2);4.strcpy和strncpy函数常⽤形式:strcpy(字符数组1,字符数组2)——————将字符串2复制到字符数组1中去,在调⽤之后得到新的字符数组1,其字符串为字符数组2的字符串。
strcpy(str1,str1); strcpy(str1,"i love china")strncpy(字符数组1,字符数组2,位数)——————将字符数组2中的前n位字符复制到数组1中strncpy(str1,str2,2)//将字符数组2的前两个字符复制到字符数组1中5.strcmp函数常⽤形式:strcmp(字符串1,字符串2)——————⽐较字符串1和字符串2的⼤⼩strcmp(str1,str2);strcmp("china","korea");strcmp("china",str1);注意返回值:如果字符串1与字符串2相同,返回值0如果字符串1⼤于字符串2,返回值为⼀个正整数如果字符串1⼩于字符串2,返回值为⼀个负整数6.strlen函数常⽤形式:strlen(字符数组)——————测量字符串长度n=strlen(str1);n的值即为字符串的长度。
string的各种函数(系统学习)
string的各种函数(系统学习)1、按照⾯向对象的要求,可以把字符串看作⼀个对象,设计⼀个串类加以描述。
但是,在⼀般的情况下不必建⽴⾃⼰的串类,c++标准在库<string>中给出了类string,提供了丰富的串操作,程序员使⽤指令: #include<string>即存取这个类。
可将类string视为⼀个容器类,其部分操作如下:构造函数:string s:构造⼀个空串sstring s(a):构造串s,并⽤字符数组a初始化string s(a,n):构造串s,⽤字符数组a的前n个字符初始化string s(str):⽤串str构造串s(拷贝初始化)看下⾯代码验证#include<iostream>#include<string.h>#include<map>#include<cstdio>#include<cstring>#include<stdio.h>#include<cmath>#include<ctype.h>#include<math.h>#include<algorithm>#include<set>#include<queue>typedef long long ll;using namespace std;const ll mod=1e9+7;const int maxn=1e5+10;const int maxk=3e5+10;const int maxx=1e4+10;const ll maxe=1000+10;#define INF 0x3f3f3f3f3f3f#define Lson l,mid,rt<<1#define Rson mid+1,r,rt<<1|1int main(){char a[maxn];cin>>a;//输⼊abcdefghstring s(a);//结果为abcdefghstring s1(a,5);//结果为abcdestring s2(s1);//结果为abcdecout<<s<<endl;cout<<s1<<endl;cout<<s2<<endl;return0;}输⼊输出:getline(cin,s,delim):从cin中提取字符存⼊串s中,当遇到delim或者提取的字符个数等于s的长度时结束,如果⾃⼰不设定,默认为'\n' getline(cin,s):遇到'\n'结束cin>>s:遇到空⽩字符终⽌提取,空⽩字符不被读取cout<<s:输出s#include<iostream>#include<string.h>#include<map>#include<cstdio>#include<cstring>#include<stdio.h>#include<cmath>#include<ctype.h>#include<math.h>#include<algorithm>#include<set>#include<queue>typedef long long ll;using namespace std;const ll mod=1e9+7;const int maxn=1e5+10;const int maxk=3e5+10;const int maxx=1e4+10;const ll maxe=1000+10;#define INF 0x3f3f3f3f3f3f#define Lson l,mid,rt<<1#define Rson mid+1,r,rt<<1|1int main(){string s;while(getline(cin,s,'#')){getchar();//⾃⼰指定了字符要加getchar,不然结果会多出⼀个换⾏,但是默认情况下不⽤加getcharcout<<s<<endl;}return0;}操作符:s=val:赋值操作,val可以是⼀个串,⼀个字符或⼀个字符数组s+=val:将val添加到串s之后s[pos]:下标操作s+t,t+s:s和t的连接,返回连接的结果。
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<<⽤于输出操作。
c语言字符串的用法
C语言中的字符串是一串字符序列,以空字符 `'\0'` 结尾。
常用的字符串处理函数和操作包括字符串输入输出、字符串比较、字符串拼接、字符串截取等。
下面介绍一些常见的字符串操作。
## 字符串定义在C语言中,可以使用字符数组定义字符串。
例如:```cchar str[] = "Hello, world!";```上述代码创建了一个字符数组 `str`,其中包含了一个字符串 "Hello, world!"。
也可以使用指针变量来定义字符串,例如:```cchar *str = "Hello, world!";```这里的 `str` 是一个指向字符型数组的指针变量,指向了字符串 "Hello, world!" 的首地址。
## 字符串输入输出在C语言中,可以使用标准库函数 `fgets()` 和 `puts()` 来进行字符串的输入输出操作。
例如:```c#include <stdio.h>int main() {char str[100];printf("请输入一个字符串:\n");fgets(str, 100, stdin);printf("您输入的字符串是:%s", str);return 0;}```上述代码中,使用 `fgets()` 函数从标准输入(即键盘)读入一个字符串,并将其存储在字符数组 `str` 中;然后使用 `puts()` 函数将该字符串输出到屏幕上。
## 字符串比较C语言中可以使用标准库函数 `strcmp()` 来比较两个字符串是否相同。
例如:```c#include <stdio.h>#include <string.h>int main() {char str1[] = "Hello";char str2[] = "World";if (strcmp(str1, str2) == 0) {printf("两个字符串相同\n");} else {printf("两个字符串不同\n");}return 0;}```上述代码使用 `strcmp()` 函数比较了两个字符串,如果两个字符串相等,则输出 "两个字符串相同";否则输出 "两个字符串不同"。
s在c语言中的用法
s在c语言中的用法在C语言中,字符's' 通常是用来表示字符串(string)的缩写。
字符串是字符数组,由一系列字符组成,以空字符'\0' 结尾。
以下是一些涉及's' 的常见用法:1. 定义字符串变量:```cchar str[] = "Hello, World!";```2. 字符串函数:C语言提供了许多用于处理字符串的标准库函数,这些函数的名字通常以's' 结尾。
例如:- `strlen`: 获取字符串的长度。
```csize_t length = strlen(str);```- `strcmp`: 比较两个字符串是否相等。
```cint result = strcmp(str1, str2);```- `strcpy`: 将一个字符串复制到另一个字符串。
```cchar destination[20];strcpy(destination, str);```- `strcat`: 将一个字符串追加到另一个字符串。
```cstrcat(destination, str);```- `strstr`: 在一个字符串中查找子串的位置。
```cchar *substring = strstr(str, "World");```3. 格式化输出:在`printf` 函数中,`%s` 是用来格式化输出字符串的占位符。
```cprintf("My string: %s\n", str);```这些只是一些's' 在C语言中的用法示例。
具体的用法会根据上下文而变化。
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语言string类型的find函数
c语言string类型的find函数C语言中的string类型是一种用来存储字符串的数据类型。
在C语言中,字符串是由一系列字符组成的,以空字符('\0')作为字符串的结束符。
在C语言中,我们经常需要在一个字符串中查找特定的字符或子串。
为了实现这个功能,C语言提供了一些内置的字符串处理函数,其中就包括了find函数。
find函数的作用是在一个字符串中寻找指定的字符或子串,并返回它们在字符串中第一次出现的位置。
这个函数可以帮助我们在一个字符串中快速定位我们需要的信息。
在使用find函数之前,我们需要先定义一个字符串变量并初始化它。
在C语言中,可以使用字符数组来表示字符串。
例如,我们可以定义一个名为str的字符数组来存储一个字符串。
接下来,我们可以使用find函数来查找字符串中的字符或子串。
该函数的原型如下:```cchar *find(char *str, char *substr);```其中,str是要查找的字符串,substr是要查找的字符或子串。
find函数的返回值是一个指向字符的指针,指向字符串中第一次出现指定字符或子串的位置。
如果找到了指定字符或子串,则返回该位置的指针;如果没有找到,则返回NULL。
下面是一个使用find函数的示例:```c#include <stdio.h>#include <string.h>char *find(char *str, char *substr){return strstr(str, substr);}int main(){char str[] = "Hello, world!";char *result = find(str, "world");if(result != NULL){printf("找到了指定的字符或子串:%s\n", result);}else{printf("没有找到指定的字符或子串\n");}return 0;}```在上面的示例中,我们定义了一个名为str的字符数组,并初始化它为"Hello, world!"。
c++ string的构造函数
c++ string的构造函数
C++标准库中的string类提供了多个构造函数,用于创建和初始化字符串对象。
以下是几种常见的构造函数:
1. 默认构造函数
```c++
string();
```
该构造函数创建一个空的字符串对象。
2. 带有字符个数 n 和初始化字符 c 的构造函数
```c++
string(size_t n, char c);
```
该构造函数创建一个由n个字符c组成的字符串对象。
3. 复制构造函数
```c++
string(const string& str);
```
该构造函数通过复制另一个字符串对象来创建一个新的字符串对象。
4. 带有C风格字符串参数的构造函数
```c++
string(const char* s);
```
该构造函数使用一个以null结尾的C风格字符串s来创建一个新的字符串对象。
5. 带有指定长度的C风格字符串参数的构造函数
```c++
string(const char* s, size_t n);
```
该构造函数使用一个指定长度n的C风格字符串s来创建一个新的字符串对象。
c语言string数组定义
c语言string数组定义在 C 语言中,可以使用 * 符号和 sizeof 运算符来定义字符串数组。
例如:```c#include <stdio.h>#include <stdlib.h>#define MAX_SIZE 100 // 最大容量char str[MAX_SIZE][256]; // 字符串数组int main() {// 初始化字符串数组for (int i = 0; i < MAX_SIZE; i++) {for (int j = 0; j < 256; j++) {str[i][j] = " ";}}// 输出字符串数组printf("字符串数组:");for (int i = 0; i < MAX_SIZE; i++) {printf("%s ", str[i]);}printf("");// 字符串互换int i, j;for (i = 0; i < MAX_SIZE; i++) {for (j = 0; j < 256; j++) {if (str[i][j] != " ") {str[i][j] = str[i][j+1];}}}return 0;}```在这个例子中,我们定义了一个字符串数组,该数组包含 256 个字符,容量为 MAX_SIZE。
我们首先使用两个嵌套的循环初始化该数组。
在外层循环中,我们使用两个指针来遍历整个字符串,分别为 str[i] 和 str[i+1]。
在内层循环中,我们使用一个指针来遍历每行字符串中的每个字符,并将它们存储在字符变量中。
最后,我们使用 if 语句将非空格字符交换到下一个空格前。
需要注意的是,在使用字符串数组时,需要确保数组元素的类型一致,否则会导致运行时错误。
在这个例子中,str[0] 和 str[i] 的类型都是字符数组,但它们的索引不同,因此需要手动进行类型转换。
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语言string函数详解
C语言string函数详解函数原型: char *strdup(const char *s)函数功能: 字符串拷贝,目的空间由该函数分配函数返回: 指向拷贝后的字符串指针参数说明: src-待拷贝的源字符串所属文件: <string.h>#include <stdio.h>#include <string.h>#include <alloc.h>int main(){char *dup_str, *string="abcde";dup_str=strdup(string);printf("%s", dup_str);free(dup_str);return 0;}@函数名称: strcpy函数原型: char* strcpy(char* str1,char* str2);函数功能: 把str2指向的字符串拷贝到str1中去函数返回: 返回str1,即指向str1的指针参数说明:所属文件: <string.h>#include <stdio.h>#include <string.h>int main(){char string[10];char *str1="abcdefghi";strcpy(string,str1);printf("the string is:%s\n",string);return 0;}函数原型: char *strncpy(char *dest, const char *src,int count)函数功能: 将字符串src中的count个字符拷贝到字符串dest中去函数返回: 指向dest的指针参数说明: dest-目的字符串,src-源字符串,count-拷贝的字符个数所属文件: <string.h>#include <stdio.h>#include <string.h>int main(){char string[10];char *str1="abcdefghi";strncpy(string,str1,3);string[3]='\0';printf("%s",string);return 0;}@函数名称: strcat函数原型: char* strcat(char * str1,char * str2);函数功能: 把字符串str2接到str1后面,str1最后的'\0'被取消函数返回: str1参数说明:所属文件: <string.h>#include <stdio.h>#include <string.h>int main(){char buffer[80];strcpy(buffer,"Hello ");strcat(buffer,"world");printf("%s\n",buffer);return 0;}函数原型: char *strncat(char *dest, const char *src, size_t maxlen)函数功能: 将字符串src中前maxlen个字符连接到dest中函数返回:参数说明:所属文件: <string.h>#include <stdio.h>#include <string.h>char buffer[80];int main(){strcpy(buffer,"Hello ");strncat(buffer,"world",8);printf("%s\n",buffer);strncat(buffer,"*************",4);printf("%s\n",buffer);return 0;}@函数名称: strcmp函数原型: int strcmp(char * str1,char * str2);函数功能: 比较两个字符串str1,str2.函数返回: str1<str2,返回负数; str1=str2,返回0; str1>str2,返回正数. 参数说明:所属文件: <string.h>#include <string.h>#include <stdio.h>int main(){char *buf1="aaa", *buf2="bbb", *buf3="ccc";int ptr;ptr=strcmp(buf2, buf1);if(ptr>0) printf("buffer 2 is greater than buffer 1\n");else printf("buffer 2 is less than buffer 1\n");ptr=strcmp(buf2, buf3);if(ptr>0) printf("buffer 2 is greater than buffer 3\n");else printf("buffer 2 is less than buffer 3\n");return 0;}函数原型: int strncmp(char *str1,char *str2,int count)函数功能: 对str1和str2中的前count个字符按字典顺序比较函数返回: 小于0:str1<str2,等于0:str1=str2,大于0:str1>str2 参数说明: str1,str2-待比较的字符串,count-比较的长度所属文件: <string.h>#include <string.h>#include <stdio.h>int main(){int ptr;char *buf1="aaabbb",*buf2="bbbccc",*buf3="ccc";ptr=strncmp(buf2,buf1,3);if (ptr>0) printf("buffer 2 is greater than buffer 1");else printf("buffer 2 is less than buffer 1");ptr=strncmp(buf2,buf3,3);if (ptr>0) printf("buffer 2 is greater than buffer 3");else printf("buffer 2 is less than buffer 3");return(0);}@函数名称: strpbrk函数原型: char *strpbrk(const char *s1, const char *s2)函数功能: 得到s1中第一个“同时也出现在s2中”字符的位置指针函数返回: 位置指针参数说明:所属文件: <string.h>#include <stdio.h>#include <string.h>int main(){char *p="Find all vowels";while(p){printf("%s\n",p);p=strpbrk(p+1,"aeiouAEIOU");}return 0;}函数原型: int strcspn(const char *s1, const char *s2)函数功能: 统计s1中从头开始直到第一个“来自s2中的字符”出现的长度函数返回: 长度参数说明:所属文件: <string.h>#include <stdio.h>#include <string.h>int main(){printf("%d\n",strcspn("abcbcadef","cba"));printf("%d\n",strcspn("xxxbcadef","cba"));printf("%d\n",strcspn("123456789","cba"));return 0;}@函数名称: strspn函数原型: int strspn(const char *s1, const char *s2)函数功能: 统计s1中从头开始直到第一个“不来自s2中的字符”出现的长度函数返回: 位置指针参数说明:所属文件: <string.h>#include <stdio.h>#include <string.h>#include <alloc.h>int main(){printf("%d\n",strspn("out to lunch","aeiou"));printf("%d\n",strspn("out to lunch","xyz"));return 0;}函数原型: char* strchr(char* str,char ch);函数功能: 找出str指向的字符串中第一次出现字符ch的位置函数返回: 返回指向该位置的指针,如找不到,则返回空指针参数说明: str-待搜索的字符串,ch-查找的字符所属文件: <string.h>#include <string.h>#include <stdio.h>int main(){char string[15];char *ptr, c='r';strcpy(string, "This is a string");ptr=strchr(string, c);if (ptr)printf("The character %c is at position: %d\n",c,ptr-string); elseprintf("The character was not found\n");return 0;}@函数名称: strrchr函数原型: char *strrchr(const char *s, int c)函数功能: 得到字符串s中最后一个含有c字符的位置指针函数返回: 位置指针参数说明:所属文件: <string.h>#include <string.h>#include <stdio.h>int main(){char string[15];char *ptr,c='r';strcpy(string,"This is a string");ptr=strrchr(string,c);if (ptr)printf("The character %c is at position:%d",c,ptr-string);elseprintf("The character was not found");return 0;}函数原型: char* strstr(char* str1,char* str2);函数功能: 找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符) 函数返回: 返回该位置的指针,如找不到,返回空指针参数说明:所属文件: <string.h>#include <stdio.h>#include <string.h>int main(){char *str1="Open Watcom C/C++",*str2="Watcom",*ptr;ptr=strstr(str1,str2);printf("The substring is:%s\n",ptr);return 0;}@函数名称: strrev函数原型: char *strrev(char *s)函数功能: 将字符串中的所有字符颠倒次序排列函数返回: 指向s的指针参数说明:所属文件: <string.h>#include <string.h>#include <stdio.h>int main(){char *forward="string";printf("Before strrev():%s",forward);strrev(forward);printf("After strrev(): %s",forward);return 0;}函数原型: char *strnset(char *s, int ch, size_t n)函数功能: 将字符串s中前n个字符设置为ch的值函数返回: 指向s的指针参数说明:所属文件: <string.h>#include <stdio.h>#include <string.h>int main(){char *string="abcdefghijklmnopqrstuvwxyz";char letter='x';printf("string before strnset: %s",string);strnset(string,letter,13);printf("string after strnset: %s",string);return 0;}@函数名称: strset函数原型: char *strset(char *s, int ch)函数功能: 将字符串s中所有字符设置为ch的值函数返回: 指向s的指针参数说明:所属文件: <string.h>#include <stdio.h>#include <string.h>int main(){char string[10]="123456789";char symbol='c';printf("Before strset(): %s", string);strset(string, symbol);printf("After strset(): %s", string);return 0;}函数原型: char *strtok(char *s1, const char *s2)函数功能: 分解s1字符串为用特定分隔符分隔的多个字符串(一般用于将英文句分解为单词)函数返回: 字符串s1中首次出现s2中的字符前的子字符串指针参数说明: s2一般设置为s1中的分隔字符规定进行子调用时(即分割s1的第二、三及后续子串)第一参数必须是NULL在每一次匹配成功后,将s1中分割出的子串位置替换为NULL(摘下链中第一个环),因此s1被破坏了。
string
区分区域性的比较是显式或隐式使用 CultureInfo对象的任何比较,包括由 CultureInfo.InvariantCulture属性指定的固定区域性。当前隐式区域性由 Thread.CurrentCulture属性指 定。
序号排序基于字符串中每个 Char对象的数值对字符串进行比较。序号比较自动区分大小写,因为字符的小 写和大写版本有着不同的码位。但是,如果大小写在应用程序中并不重要,则可以指定忽略大小写的序号比较。 这相当于使用固定区域性将字符串转换为大写,然后对结果执行序号比较。
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为起始位 置的字符数组中,返回实际拷贝的数目
可以使用“ADD”运算符将多个字符进行连接运算。 表现层示例 示例输出 示例说明 输出一个字符。 逻辑层示例 示例说明 设置一个变量名为actiondesc的局部变量的内容为字符"编辑内容" 表现层示例
类
作用: 命名空间
程序集 语法
表示文本,即一系列 Unicode字符。
System
mscorlib(在 mscorlib.dll中)
使用 ToLower、ToLowerInvariant、ToUpper和 ToUpperInvariant方法可更改字符串中 Unicode字符的 大小写。
string类型通过下标操作符([ ])来访问 string对象中的单个字符。下标操作符需要取一个 size_type类 型的值,来标明要访问字符的位置。这个下标中的值通常被称为“下标”或“索引”(index).
[UE4]C++string的用法和例子
[UE4]C++string的⽤法和例⼦使⽤场合:string是C++标准库的⼀个重要的部分,主要⽤于字符串处理。
可以使⽤输⼊输出流⽅式直接进⾏操作,也可以通过⽂件等⼿段进⾏操作。
同时C++的算法库对string也有着很好的⽀持,⽽且string还和c语⾔的字符串之间有着良好的接⼝。
虽然也有⼀些弊端,但是瑕不掩瑜。
其中使⽤的代码多数都是来⾃cpp官⽹,因为例⼦⾮常全。
声明和初始化⽅法:想使⽤string⾸先要在头⽂件当中加⼊< string >声明⽅式也很简单声明:string s;//声明⼀个string 对象string ss[10];//声明⼀个string对象的数组初始化:使⽤等号的初始化叫做拷贝初始化,不使⽤等号的初始化叫做直接初始化。
#include <bits/stdc++.h>using namespace std; //注意:如果没有这⼀⾏,则需要写成std::stringint main(){ios::sync_with_stdio(false);string s;//默认初始化,⼀个空字符串string s1("ssss");//s1是字⾯值“ssss”的副本string s2(s1);//s2是s1的副本string s3=s2;//s3是s2的副本string s4(10,'c');//把s4初始化string s5="hiya";//拷贝初始化string s6=string(10,'c');//拷贝初始化,⽣成⼀个初始化好的对象,拷贝给s6//string s(cp,n)char cs[]="12345";string s7(cs,3);//复制字符串cs的前3个字符到s当中//string s(s2,pos2)string s8="asac";string s9(s8,2);//从s2的第⼆个字符开始拷贝,不能超过s2的size//string s(s2,pos2,len2)string s10="qweqweqweq";string s11(s10,3,4);//s4是s3从下标3开始4个字符的拷贝,超过s3.size出现未定义return0;}字符串处理:substr操作:注意substr没有迭代器作为参数的操作#include <bits/stdc++.h>using namespace std;int main(){ios::sync_with_stdio(false);string s="abcdefg";//s.substr(pos1,n)返回字符串位置为pos1后⾯的n个字符组成的串string s2=s.substr(1,5);//abcde//s.substr(pos)//得到⼀个pos到结尾的串string s3=s.substr(4);//efgreturn0;}如果输⼊的位置超过字符的长度,会抛出⼀个out_of_range的异常insert操作:代码来⾃cpp官⽹,经过⾃⼰的整理注意⽤迭代器当参数和⽆符号数当参数的区别#include <bits/stdc++.h>using namespace std;int main(){ios::sync_with_stdio(false);string str="to be question";string str2="the ";string str3="or not to be";string::iterator it;//s.insert(pos,str)//在s的pos位置插⼊strstr.insert(6,str2); // to be the question//s.insert(pos,str,a,n)在s的pos位置插⼊str中插⼊位置a到后⾯的n个字符str.insert(6,str3,3,4); // to be not the question//s.insert(pos,cstr,n)//在pos位置插⼊cstr字符串从开始到后⾯的n个字符str.insert(10,"that is cool",8); // to be not that is the question//s.insert(pos,cstr)在s的pos位置插⼊cstrstr.insert(10,"to be "); // to be not to be that is the question//s.insert(pos,n,ch)在s.pos位置上⾯插⼊n个chstr.insert(15,1,':'); // to be not to be: that is the question//s.insert(s.it,ch)在s的it指向位置前⾯插⼊⼀个字符ch,返回新插⼊的位置的迭代器it = str.insert(str.begin()+5,','); // to be, not to be: that is the question//s.insert(s.it,n,ch)//在s的it所指向位置的前⾯插⼊n个chstr.insert (str.end(),3,'.'); // to be, not to be: that is the question...//s.insert(it,str.ita,str.itb)在it所指向的位置的前⾯插⼊[ita,itb)的字符串str.insert (it+2,str3.begin(),str3.begin()+3); // to be, or not to be: that is the question...return0;}erase操作:⽤来执⾏删除操作删除操作有三种指定pos和len,其中pos为为起始位置,pos以及后⾯len-1个字符串都删除迭代器,删除迭代器指向的字符迭代器范围,删除这⼀范围的字符串,范围左闭右开代码来⾃cpp官⽹#include <iostream>#include <string>int main (){std::string str ("This is an example sentence.");std::cout << str << '\n';// "This is an example sentence."str.erase (10,8); // ^^^^^^^^//直接指定删除的字符串位置第⼗个后⾯的8个字符std::cout << str << '\n';// "This is an sentence."str.erase (str.begin()+9);// ^//删除迭代器指向的字符std::cout << str << '\n';// "This is a sentence."// ^^^^^str.erase (str.begin()+5, str.end()-9);//删除迭代器范围的字符std::cout << str << '\n';// "This sentence."return0;}append和replace操作:append函数可以⽤来在字符串的末尾追加字符和字符串。
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类的构造函数和析构函数如下:string s;//生成一个空字符串sstring s(str)//拷贝构造函数生成str的复制品string s(str,stridx)//将字符串str内"始于位置stridx"的部分当作字符串的初值string s(str,stridx,strlen)//将字符串str内"始于stridx且长度顶多strlen"的部分作为字符串的初值string s(cstr)//将C字符串作为s的初值string s(chars,chars_len)//将C字符串前chars_len个字符作为字符串s的初值。
string s(num,c)//生成一个字符串,包含num个c字符string s(beg,end)//以区间beg;end(不包含end)内的字符作为字符串s的初值s.~string()//销毁所有字符,释放内存2.字符串操作函数这里是C++字符串的重点,我先把各种操作函数罗列出来,不喜欢把所有函数都看完的人可以在这里找自己喜欢的函数,再到后面看他的详细解释。
=,assign()//赋以新值swap()//交换两个字符串的内容+=,append(),push_back()//在尾部添加字符insert()//插入字符erase()//删除字符clear()//删除全部字符replace()//替换字符+//串联字符串==,!=,<,<=,>,>=,compare()//比较字符串size(),length()//返回字符数量max_size()//返回字符的可能最大个数empty()//判断字符串是否为空capacity()//返回重新分配之前的字符容量reserve()//保留一定量内存以容纳一定数量的字符[ ], at()//存取单一字符>>,getline()//从stream读取某值<< //将某值写入streamcopy()//将某值赋值为一个C_stringc_str()//将内容以C_string返回data()//将内容以字符数组形式返回substr()//返回某个子字符串查找函数begin() end()//提供类似STL的迭代器支持rbegin() rend()//逆向迭代器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++字符串存在三种大小:(1)现有的字符数,函数是size()和length(),他们等效。
empty()用来检查字符串是否为空。
(2)max_size() 这个大小是指当前C++字符串最多能包含的字符数,很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。
我们一般情况下不用关心他,应该大小足够我们用的。
但是不够用的话,会抛出length_error异常(3)capacity()重新分配内存之前string所能包含的最大字符数。
这里另一个需要指出的是reserve()函数,这个函数为string重新分配内存。
重新分配的大小由其参数决定,默认参数为0,这时候会对string进行非强制性缩减。
还有必要再重复一下C++字符串和C字符串转换的问题,许多人会遇到这样的问题,自己做的程序要调用别人的函数、类什么的(比如数据库连接函数Connect(char*,char*)),但别人的函数参数用的是char*形式的,而我们知道,c_str()、data()返回的字符数组由该字符串拥有,所以是一种const char*,要想作为上面提及的函数的参数,还必须拷贝到一个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 string a;的操作符[]对索引值是 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"比较。
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();string提供了很多函数用于插入(insert)、删除(erase)、替换(replace)、增加字符。
先说增加字符(这里说的增加是在尾巴上),函数有 +=、append()、push_back()。
举例如下:s+=str;//加个字符串s+="my name is jiayp";//加个C字符串s+=’a’;//加个字符s.append(str);s.append(str,1,3);//不解释了同前面的函数参数assign的解释s.append(str,2,string::npos)//不解释了s.append("my name is jiayp");s.append("nico",5);s.append(5,’x’);s.push_back(‘a’);//这个函数只能增加单个字符对STL熟悉的理解起来很简单也许你需要在string中间的某个位置插入字符串,这时候你可以用insert()函数,这个函数需要你指定一个安插位置的索引,被插入的字符串将放在这个索引的后面。