C++ string类详解

合集下载

C语言--字符串详解

C语言--字符串详解

C语⾔--字符串详解 字符串是⼀种⾮常重要的数据类型,但是C语⾔不存在显式的字符串类型,C语⾔中的字符串都以字符串常量的形式出现或存储在字符数组中。

同时,C 语⾔提供了⼀系列库函数来对操作字符串,这些库函数都包含在头⽂件 string.h 中。

⼀、字符串常量和字符数组1.1、什么是字符串常量 C 语⾔虽然没有字符串类型,但是 C语⾔提是存在字符串这个概念的,也就是字符串常量:以 NUL 字节结尾的 0 个或多个字符组成的序列。

字符串常量是不可被修改的,⼀般⽤⼀对双引号(" ")括起的⼀串字符来表⽰字符串常量,如: "Hello!"、"\aWarning!\a"、"123abc\n"、"" 字符串常量可以为空,如""就是⼀个空的字符串常量,但是即使为空,还是存在⼀个终⽌符 NUL 的。

(在 C 语⾔中,常⽤转义字符 \0来表⽰ NUL)1.2、字符串常量与指针 字符串常量与指针关系密切,因为字符串常量的值,实际上表⽰的是存储这些字符的内存空间的地址,更准确地说是字符串常量中第 1个字符的地址,⽽不是这些字符本⾝。

因此,在 C 语⾔中是不能直接进⾏字符串赋值的(因为没有字符串类型嘛)。

在 C 语⾔中,常通过声明⼀个指向 char 类型的指针并将其初始化为⼀个字符串常量的⽅式来访问⼀个字符串:char *message = "Hello World!";// 上⾯的语句也可以拆分成下⾯两句char *message;message = "Hello World!"; // 这句话看起来像是字符串复制,其实不是,只是涉及到指针操作 上述语句声明了⼀个指向 char 类型的指针,并⽤字符串常量中第 1 个字符的地址对该指针进⾏初始化。

可以通过字符指针 message 来访问字符串常量:#include <stdio.h>int main(){ char *message = "Hello World!"; printf("%s\n",message); while(*message != '\0'){ printf("%c ",*message++); } printf("\n"); return0;}/* output:* Hello World!* H e l l o W o r l d !*/ 这段代码,使⽤字符指针遍历了字符串常量中的每⼀个字符。

C语言指针的长度和类型详解

C语言指针的长度和类型详解

C语言指针的长度和类型详解C语言指针的长度和类型详解指针是C语言的精髓,以下是店铺搜索整理的关于C语言指针的长度和类型详解,对于初学者深入理解C语言程序设计有很好的参考价值,有需要的朋友可以参考一下!想了解更多相关信息请持续关注我们店铺!一般来说,如果考虑应用程序的兼容性和可移植性,指针的长度就是一个问题,在大部分现代平台上,数据指针的长度通常是一样的,与指针类型无关,尽管C标准没有规定所有类型指针的长度相同,但是通常实际情况就是这样。

但是函数指针长度可能与数据指针的长度不同。

指针的长度取决于使用的机器和编译器,例如:在现代windows 上,指针是32位或是64位长测试代码如下:#include<stdio.h>#include<math.h>#include<stdlib.h>#include<stddef.h>struct p{int n;float f;};int main(){struct p *sptr;printf("sizeof *char: %d ", sizeof(char*));printf("sizeof *int: %d ", sizeof(int*));printf("sizeof *float: %d ", sizeof(float*));printf("sizeof *double: %d ", sizeof(double*));printf("sizeof *struct: %d ", sizeof(sptr));return 0;}运行结果如下图所示:指针相关的预定义类型:① size_t:用于安全地表示长度② ptrdiff_t:用于处理指针算术运算③ intptr_t:用于存储指针地址④ uintptr_t:用于存储指针地址分述如下:一、size_t类型size_t 类型是标准C库中定义的,应为unsigned int,在64位系统中为long unsigned int。

深入学习C++_String2.1版

深入学习C++_String2.1版

目录
目录 1
正文 4
一、 C++的string的使用 4
1.1 C++ string简介 4
1.2 string的成员 4
1.2.1 append 4
1.2.2 assign 5
1.2.3 at 5
1.2.4 begin 6
1.2.5 c_str 6
1.2.6 capacity 6
一、 C++的string的使用
1.1 C++ string简介
C++兼容C对字符串的处理方式,与此同时还在标准库(STL)中提供了string 容器,我们可以很容易的使用string来进行字符串处理。而且string还能很好的与标准库中的泛型算法结合起来使用,非常的方便。虽然在MFC等框架中也提供了诸如CString这样的字符串处理类,但是个人认为STL的string依然是最棒 的,使用标准库提供的string可以轻松的与原来的C API兼容 ,也可以很好的与系统底层的API兼容。
声明:
本文中选择的源码为MSSTL和boost1.37,例子为作者亲手所写,如果代码来自网络或者其它地方我会尽量声明出处。人难免会有疏漏,所以可能会有照顾不周的地方,我也无意侵害您的权益,如果您发现了这样的情况在本文档中出现,请您通知我,我保证马上更正。本文中凡是作者原创的内容,您可以随意修改与使用,欢迎您传播。
basic_string<CharType, Traits, Allocator>& append(
const_pointer _First,
const_pointer _Last

转:std::string用法详解

转:std::string用法详解

转:std::string用法详解前言: string 的角色1 string 使用1.1 充分使用string 操作符1.2 眼花缭乱的string find 函数1.3 string insert, replace, erase 2 string 和 C风格字符串3 string 和 Charactor Traits4 string 建议5 附录前言: string 的角色1、 string 使用其实,string并不是一个单独的容器,只是basic_string 模板类的一个typedef 而已,相对应的还有wstring, 你在string 头文件中你会发现下面的代码:extern "C++" {typedef basic_string <char> string;typedef basic_string <wchar_t> wstring;} // extern "C++"由于只是解释string的用法,如果没有特殊的说明,本文并不区分string 和 basic_string的区别。

string 其实相当于一个保存字符的序列容器,因此除了有字符串的一些常用操作以外,还有包含了所有的序列容器的操作。

字符串的常用操作包括:增加、删除、修改、查找比较、链接、输入、输出等。

详细函数列表参看附录。

不要害怕这么多函数,其实有许多是序列容器带有的,平时不一定用的上。

如果你要想了解所有函数的详细用法,你需要查看basic_string,或者下载STL编程手册。

这里通过实例介绍一些常用函数。

1.1 充分使用string 操作符string 重载了许多操作符,包括 +, +=, <, =, , [], <<, >>等,正式这些操作符,对字符串操作非常方便。

先看看下面这个例子:tt.cpp(例程2)#i nclude <string>#i nclude <iostream>using namespace std;int main(){string strinfo="Please input your name:";cout << strinfo ;cin >> strinfo;if( strinfo == "winter" )cout << "you are winter!"<<endl;else if( strinfo != "wende" )cout << "you are not wende!"<<endl;else if( strinfo < "winter")cout << "your name should be ahead of winter"<<endl;elsecout << "your name should be after of winter"<<endl;strinfo += " , Welcome to China!";cout << strinfo<<endl;cout <<"Your name is :"<<endl;string strtmp = "How are you? " + strinfo;for(int i = 0 ; i < strtmp.size(); i ++)cout<<strtmp[i];return 0;}下面是程序的输出-bash-2.05b$ make ttc++ -O -pipe -march=pentiumpro tt.cpp -o tt-bash-2.05b$ ./ttPlease input your name:Heroyou are not wende!Hero , Welcome to China!How are you? Hero , Welcome to China!有了这些操作符,在STL中仿函数都可以直接使用string作为参数,例如 less, great, equal_to 等,因此在把string作为参数传递的时候,它的使用和int 或者float等已经没有什么区别了。

C语言字符串替换:字符,字符串,字符数组详解

C语言字符串替换:字符,字符串,字符数组详解

C语⾔字符串替换:字符,字符串,字符数组详解⽬录案例描述案例分析必备知识1,字符数组(1)字符数组的定义(2)字符数组的初始化2,字符串概念(1)字符串的概念(2)⽤字符初始化字符数组(3)获取字符串的长度3,字符串与指针4,字符数组与字符指针总结案例描述字符串替换是处理字符串时最常见的操作之⼀,也是学习字符串必须掌握的知识。

本案例要求通过编程实现字符串“Good moring”到“Good evening”的转换。

案例分析我们需要从字符串中被替换的位置开始,将要替换的内容逐个复制到原字符串中,直到字符串结束或者替换的字符串结束为⽌。

为了顺利完成案例,需要先学习字符数组,字符串,字符指针等基础知识。

必备知识1,字符数组字符数组是存放字符数据的数组,其中每⼀个元素都是单个字符(1)字符数组的定义字符数组定义的语法格式如下:char 数组名[常量表达式];char 数组名[常量表达式1][常量表达式2]在上述语法中,分别列举了定义⼀维字符数组和⼆维字符数组的⽅法。

⽰例代码如下:char ch[6];(2)字符数组的初始化在数组定义的同时也可以对数组中的元素进⾏赋值,这个过程称为数组的初始化,⽰例代码如下:char c[5] = {'h','e','l','l','o'};注意字符数组的初始化很简单,但要注意以下⼏点。

(1)元素个数不能多于字符数组的⼤⼩,否则编译器会出错(2)如果初始项少于数组长度,则空余元素均会被赋值为空字符(‘\0')(3)如果没有指定数组⼤⼩,则编译器会根据初始项的个数为数组分配长度(4)也可以初始化⼆维数组(和整型数组基本⼀致)2,字符串概念(1)字符串的概念字符串是由数字、字母、下划线和空格等各种字符组成的⼀串字符,是个常量,字符串的末尾都默认有⼀个'\0'作为结束符。

"abcde"" "上⾯这两⾏都是字符串,只不过第⼆个字符串中的字符都是空格字符串在各种编程语⾔中都是⾮常重要的数据类型,但是C语⾔中没有字符串的固定类型,通常⽤字符数组的形式来存储和处理字符串,这种字符数组必须以'\0'结尾。

c语言 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个字符。

C#中string.format用法详解

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,(精度说明符指⽰结果字符串中所需的最少数字个数。

VC++ CString详解

VC++  CString详解

1、CString 对象的连接:用”+”2、格式化字符串:用CString 对象的Format()方法。

用这种方法的好处是你不用担心用来存放格式化后数据的缓冲区是否足够大,这些工作由CString类替你完成。

格式化是一种把其它不是字符串类型的数据转化为CString类型的最常用技巧。

*****CString s; s.Format(_T("%d"), total);我总是对我的字符串使用_T()宏,这是为了让我的代码至少有Unicode的意识#define _T(x) x // 非Unicode版本(non-Unicode version)而在Unicode环境下是如下定义的:#define _T(x) L##x // Unicode版本(Unicode version)所以在Unicode环境下,它的效果就相当于:s.Format(L"%d", total);如果你认为你的程序可能在Unicode的环境下运行,那么开始在意用Unicode 编码。

比如说,不要用sizeof() 操作符来获得字符串的长度,因为在Unicode环境下就会有2倍的误差。

我们可以用一些方法来隐藏Unicode的一些细节,比如在我需要获得字符长度的时候,我会用一个叫做DIM的宏,这个宏是在我的dim.h文件中定义的,我会在我写的所有程序中都包含这个文件:#define DIM(x) ( sizeof((x)) / sizeof((x)[0]) )这个宏不仅可以用来解决Unicode的字符串长度的问题,也可以用在编译时定义的表格上,它可以获得表格的项数,如下:class Whatever { ... };Whatever data[] = {{ ... },...{ ... },};for(int i = 0; i < DIM(data); i++) // 扫描表格寻找匹配项。

C语言字符串的输入输出

C语言字符串的输入输出

C语言字符串的输入输出C语言字符串的输入输出C语言适于编写系统软件,三维,二维图形和动画它是数值计算的高级语言。

那么大家知道C语言字符串的输入输出是怎样的呢?下面一起来看看!字符串的输出在C语言中,输出字符串的函数有两个:puts():直接输出字符串,并且只能输出字符串。

printf():通过格式控制符 %s 输出字符串。

除了字符串,printf() 还能输出其他类型的数据。

这两个函数前面已经讲过了,这里不妨再演示一下,请看下面的代码:#includeint main(){ int i; char str[] = ""; printf("%s ", str); //通过变量输出printf("%s ", ""); //直接输出puts(str); //通过变量输出puts(""); //直接输出 return 0;}运行结果:在printf() 函数中使用%s输出字符串时,在变量列表中给出数组名即可,不能写为printf("%s", str[]);。

字符串的输入在C语言中,输入字符串的函数有两个:scanf():通过格式控制符%s 输入字符串。

除了字符串,scanf() 还能输入其他类型的数据。

gets():直接输入字符串,并且只能输入字符串。

1) 使用 scanf() 读取字符串请先看下面的例子:#includeint main(){ char str1[30], str2[30]; printf("Input str1: "); scanf("%s", str1); printf("Input str2: "); scanf("%s", str2); printf("str1: %s str2: %s ", str1, str2); return 0;}运行结果:Input str1: c.bi ↙Input str2: Java Python C-Sharp↙str1: str2: Java由于字符数组长度为30,因此输入的字符串长度必须小于30,以留出一个字节用于存放字符串结束标志``。

C语言-字符串函数大全和详解

C语言-字符串函数大全和详解

c语言字符串函数详解void *memset(void *dest, int c, size_t count);将dest前面count个字符置为字符c.返回dest的值.void *memmove(void *dest, const void *src, size_t count);从src复制count字节的字符到dest. 如果src和dest出现重叠, 函数会自动处理.返回dest的值.void *memcpy(void *dest, const void *src, size_t count);从src复制count字节的字符到dest. 与memmove功能一样, 只是不能处理src和dest出现重叠.返回dest的值.void *memchr(const void *buf, int c, size_t count);在buf前面count字节中查找首次出现字符c的位置. 找到了字符c或者已经搜寻了count 个字节, 查找即停止.操作成功则返回buf中首次出现c的位置指针, 否则返回NULL.void *_memccpy(void *dest, const void *src, int c, size_t count);从src复制0个或多个字节的字符到dest. 当字符c被复制或者count个字符被复制时, 复制停止.如果字符c被复制, 函数返回这个字符后面紧挨一个字符位置的指针. 否则返回NULL.int memcmp(const void *buf1, const void *buf2, size_t count);比较buf1和buf2前面count个字节大小.返回值< 0, 表示buf1小于buf2;返回值为0, 表示buf1等于buf2;返回值> 0, 表示buf1大于buf2.int memicmp(const void *buf1, const void *buf2, size_t count);比较buf1和buf2前面count个字节. 与memcmp不同的是, 它不区分大小写. 返回值同上.size_t strlen(const char *string);获取字符串长度, 字符串结束符NULL不计算在内.没有返回值指示操作错误.char *strrev(char *string);将字符串string中的字符顺序颠倒过来. NULL结束符位置不变.返回调整后的字符串的指针.char *_strupr(char *string);将string中所有小写字母替换成相应的大写字母, 其它字符保持不变.返回调整后的字符串的指针.char *_strlwr(char *string);将string中所有大写字母替换成相应的小写字母, 其它字符保持不变.返回调整后的字符串的指针.char *strchr(const char *string, int c);查找字符c在字符串string中首次出现的位置, NULL结束符也包含在查找中.返回一个指针, 指向字符c在字符串string中首次出现的位置, 如果没有找到, 则返回NULL. char *strrchr(const char *string, int c);查找字符c在字符串string中最后一次出现的位置, 也就是对string进行反序搜索, 包含NULL结束符.返回一个指针, 指向字符c在字符串string中最后一次出现的位置, 如果没有找到, 则返回NULL.char *strstr(const char *string, const char *strSearch);在字符串string中查找strSearch子串.返回子串strSearch在string中首次出现位置的指针. 如果没有找到子串strSearch, 则返回NULL. 如果子串strSearch为空串, 函数返回string值.char *strdup(const char *strSource);函数运行中会自己调用malloc函数为复制strSource字符串分配存储空间, 然后再将strSource复制到分配到的空间中. 注意要及时释放这个分配的空间.返回一个指针, 指向为复制字符串分配的空间; 如果分配空间失败, 则返回NULL值.char *strcat(char *strDestination, const char *strSource);将源串strSource添加到目标串strDestination后面, 并在得到的新串后面加上NULL结束符. 源串strSource的字符会覆盖目标串strDestination后面的结束符NULL. 在字符串的复制或添加过程中没有溢出检查, 所以要保证目标串空间足够大. 不能处理源串与目标串重叠的情况.函数返回strDestination值.char *strncat(char *strDestination, const char *strSource, size_t count);将源串strSource开始的count个字符添加到目标串strDest后. 源串strSource的字符会覆盖目标串strDestination后面的结束符NULL. 如果count大于源串长度, 则会用源串的长度值替换count值. 得到的新串后面会自动加上NULL结束符. 与strcat函数一样, 本函数不能处理源串与目标串重叠的情况.函数返回strDestination值.char *strcpy(char *strDestination, const char *strSource);复制源串strSource到目标串strDestination所指定的位置, 包含NULL结束符. 不能处理源串与目标串重叠的情况.函数返回strDestination值.char *strncpy(char *strDestination, const char *strSource, size_t count);将源串strSource开始的count个字符复制到目标串strDestination所指定的位置. 如果count 值小于或等于strSource串的长度, 不会自动添加NULL结束符目标串中, 而count大于strSource串的长度时, 则将strSource用NULL结束符填充补齐count个字符, 复制到目标串中. 不能处理源串与目标串重叠的情况.函数返回strDestination值.char *strset(char *string, int c);将string串的所有字符设置为字符c, 遇到NULL结束符停止.函数返回内容调整后的string指针.char *strnset(char *string, int c, size_t count);将string串开始count个字符设置为字符c, 如果count值大于string串的长度, 将用string 的长度替换count值.函数返回内容调整后的string指针.size_t strspn(const char *string, const char *strCharSet);查找任何一个不包含在strCharSet串中的字符(字符串结束符NULL除外) 在string串中首次出现的位置序号.返回一个整数值, 指定在string中全部由characters中的字符组成的子串的长度. 如果string 以一个不包含在strCharSet中的字符开头, 函数将返回0值.size_t strcspn(const char *string, const char *strCharSet);查找strCharSet串中任何一个字符在string串中首次出现的位置序号, 包含字符串结束符NULL.返回一个整数值, 指定在string中全部由非characters中的字符组成的子串的长度. 如果string以一个包含在strCharSet中的字符开头, 函数将返回0值.char *strspnp(const char *string, const char *strCharSet);查找任何一个不包含在strCharSet串中的字符(字符串结束符NULL除外) 在string串中首次出现的位置指针.返回一个指针, 指向非strCharSet中的字符在string中首次出现的位置.char *strpbrk(const char *string, const char *strCharSet);查找strCharSet串中任何一个字符在string串中首次出现的位置, 不包含字符串结束符NULL.返回一个指针, 指向strCharSet中任一字符在string中首次出现的位置. 如果两个字符串参数不含相同字符, 则返回NULL值.int strcmp(const char *string1, const char *string2);比较字符串string1和string2大小.返回值< 0, 表示string1小于string2;返回值为0, 表示string1等于string2;返回值> 0, 表示string1大于string2.int stricmp(const char *string1, const char *string2);比较字符串string1和string2大小,和strcmp不同, 比较的是它们的小写字母版本.返回值与strcmp相同.int strcmpi(const char *string1, const char *string2);等价于stricmp函数, 只是提供一个向后兼容的版本.int strncmp(const char *string1, const char *string2, size_t count);比较字符串string1和string2大小,只比较前面count个字符. 比较过程中, 任何一个字符串的长度小于count, 则count将被较短的字符串的长度取代. 此时如果两串前面的字符都相等, 则较短的串要小.返回值< 0, 表示string1的子串小于string2的子串;返回值为0, 表示string1的子串等于string2的子串;返回值> 0, 表示string1的子串大于string2的子串.int strnicmp(const char *string1, const char *string2, size_t count);比较字符串string1和string2大小,只比较前面count个字符. 与strncmp不同的是, 比较的是它们的小写字母版本.返回值与strncmp相同.char *strtok(char *strToken, const char *strDelimit);在strToken 串中查找下一个标记, strDelimit字符集则指定了在当前查找调用中可能遇到的分界符.返回一个指针, 指向在strToken中找到的下一个标记. 如果找不到标记, 就返回NULL值. 每次调用都会修改strToken内容, 用NULL字符替换遇到的每个分界符.本文来自CSDN博客,转载请标明出处:/wully_happy/archive/2008/03/25/2216575.aspx。

C++中字符串的常见操作

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++程序设计实验报告C++实验报告实验一1. 实验要求(1)编写一个函数把华氏温度转换为摄氏温度,转换公式如下C=(F-32)*5/9(2)编写重载函数Max1可分别求两个整数,三个整数,两个双精度数,三个双精度数的最大值。

(3)使用系统函数pow(x,y)计算xy的值,注意包含头文件math.h。

(4)用递归的方法编写函数求Fibonacci级数,观察递归调用的过程2. 实验内容及实验步骤(1)编写函数float Convert(float TempFer),参数和返回值都为float类型,实现算法C=(F-32)*5/9,在main()函数中实现输入、输出。

程序名:lab3_1.cpp。

(2)分别编写四个同名函数max1,实现函数重载,在main()函数中测试函数功能。

程序名:lab3_2.cpp(3)在main()函数中提示输入两个整数x、y,使用cin语句得到x、y的值,调用pow(x,y)函数计算x的y次幂的结果,再显示出来。

程序名:lab3_4.cpp(4)编写递归函数int fib(int n),在主程序中输入n的值,调用fib函数计算Fibonacci级数。

公式为fib(n)=fib(n-1)+fib(n-2),n2;fib(1)=fib(2)=1。

使用if语句判断函数的出口,在程序中用cout语句输出提示信息。

程序名:(转载于: 写论文网:c,,实验报告,用string类申明字符串对象实现数组的转置)lab3_5.cpp(5)使用debug中的Step Into追踪到函数内部,观察函数的调用过程。

3.源程序Lab3_1#includeiostreamusing namespace std;float fun(float x){ float y;y=(x-32)*5/9;return y;}void main(){ float f,c;cout请输入华氏温度: ;cinf;c=fun(f);cout对应的摄氏温度为: cendl; }运行结果Lab3_2#includeiostreamusing namespace std;int Max1(int x,int y){ return (xy?x:y);}int Max1(int x,int y,int z){ int h,k;h=(xy?x:y);k=(hz?h:z);return k;}double Max1(double x,double y) {return (xy?x:y);}double Max1(double x,double y,double z) { double h,k;h=(xy?x:y);k=(hz?h:z);return k;}void main(){ int i,j,k;double l,m,n;cout请输入两个整数: ;cinij;cout最大数为: Max1(i,j)endl;cout请输入三个整数: ;cinijk;cout最大数为: Max1(i,j,k)endl;cout请输入两个双精度数: ;cinlm;cout最大数为: Max1(l,m)endl;cout请输入三个双精度数: ;cinlmn;cout最大数为: Max1(l,m,n)endl;}运行结果Lab3_3#includeiostream#includecmathusing namespace std; void main(){ double p,x,y;cinxy;p=pow(x,y);coutpendl;}运行结果Lab3_4#includeiostream.hint fib(int n);int main(){int n,answer;coutEnter number:endl; cinn;cout\n\n;answer=fib(n);coutansweris thenth Fibonacci number\nendl;return 0;}int fib(int n){coutProcessing fib(n)…endl;if(n3){coutReutrn 1!\n;return(1);}elsecoutCall fib(n-2)and fib(n-1).\nendl;return(fib(n-2)+fib(n-1));}运行结果4.实验体会其实这次实验涉及C++的内容并不多,主要练习的只是C++中的输入输出和重载函数的应用。

MFC、C++、C中字符类型CString int string char知识

MFC、C++、C中字符类型CString int string char知识

MFC/C++/C中字符类型CString, int, string, char*转换(转)参考网址:/s/blog_50a0aa5e0100dntj.html1 CString,int,string,char*之间的转换string 转CString例子:CString.format("%s", string.c_str());char 转CString例子:CString.format("%s", char*);char 转string例子:string s(char *);string 转char *例子:char *p = string.c_str();// CString转std::stringCString str = dlg.GetPathName();setlocale(LC_ALL, "chs");char *p = new char[256];wcstombs ( p, str, 256 );m_fileName = p;1,string -> CStringCString.format("%s", string.c_str());用c_str()确实比data()要好.2,char -> stringstring s(char *);你的只能初始化,在不是初始化的地方最好还是用assign().3,CString -> stringstring s(CString.GetBuffer());GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间. 《C++标准函数库》中说的有三个函数可以将字符串的内容转换为字符数组和C—string1.data(),返回没有”\0“的字符串数组2,c_str(),返回有”\0“的字符串数组3,copy()CString互转int 将字符转换为整数,可以使用atoi、_atoi64或atol。

c 有string类型的基础知识选择题

c 有string类型的基础知识选择题

c 有string类型的基础知识选择题全文共四篇示例,供读者参考第一篇示例:在C语言中,虽然没有内置的string类型,但我们可以使用字符数组来表示字符串。

下面是一些关于C语言中string类型基础知识的选择题:1. 在C语言中表示字符串的最常见方法是使用什么数据类型?A. intB. floatC. charD. double答案:C2. 下面哪种声明方式可以正确定义一个字符数组来存储字符串"Hello"?A. char str[6] = "Hello";B. char str[5] = "Hello";C. char str[] = "Hello";D. char str[5] = {'H', 'e', 'l', 'l', 'o'};4. 下面哪个函数用于计算字符串的长度?A. strlen()B. strcpy()C. strcat()D. strcmp()9. 字符串"Hello World"的长度是多少?A. 10B. 11C. 12D. 13第二篇示例:1. 在C语言中,字符串类型是以哪种方式进行表示的?A. 数组B. 结构体C. 指针D. 链表2. 下列哪种数据类型用于表示字符串的结尾?A. charB. intC. floatD. null4. 下列哪个函数用于比较两个字符串是否相等?A. strlen()B. strcpy()C. strcmp()D. strcat()11. 在C语言中,如何声明一个字符串变量?A. char str;B. char *str[];C. char str[];D. char *str;12. 下列哪个语句用于初始化一个字符串变量?A. str = "hello";B. strcpy(str, "hello");C. str = {'h', 'e', 'l', 'l', 'o', '\0'};D. str = "hello\0";15. 在C语言中,如何将一个整数转换为字符串?A. itoa()B. atoi()C. atof()D. sprintf()答案:1. A2. D3. D4. C5. A6. B7. D8. D9. D10. A11. D12. B13. A14. A15. D希望以上选择题能帮助大家更好地了解C语言中关于字符串类型的基础知识。

转载:CC++关于string.h头文件和string类

转载:CC++关于string.h头文件和string类

转载:CC++关于string.h头⽂件和string类学习C语⾔时,⽤字符串的函数例如stpcpy()、strcat()、strcmp()等,要包含头⽂件string.h 学习C++后,C++有字符串的标准类string,string 类也有很多⽅法,⽤string类时要⽤到string.h头⽂件。

我现在看vc的书上也有CString类,这个要包含什么,怎么⽤?我现在很迷惑,这两个 string.h有什么区别。

是怎么回事且看⼀:这两个⼀个是标准C库的,定义了⼀些字符串的处理函数.⼀个是标准C++库的,定义了标准C++的std::string类. 要⽤这个类要包含头⽂件<string>...如下; #include <string> using namespace std;//关于名字空间有兴趣⾃⼰查去,⼀般⽤标准库这句就⾏了当然标准C库也是标准C++库的⼀部分,要⽤标准C库⾥的处理函数...如下: #include <string.h>//所以你⽤这句包含的是标准C库的头⽂件 ...或者⽤如下C++风格的,它们是等价的,不过⽐较推荐: #include <cstring> using namespace std;CString类是MFC的类,...不搞Windows MFC编程⽤不到且看⼆:#include < string .h >void main() {string aaa = " abcsd d " ;printf( " looking for abc from abcdecd %s/n " , (strcmp(aaa, " abc " )) ? " Found " : " Not Found " );} 不能正确执⾏,提⽰说是string类型没有定义 ⽽下⾯:#include < string >using namespace std; void main(){ string aaa = " abcsd d " ;printf( " looking for abc from abcdecd %s/n " , (strcmp(aaa, " abc " )) ? " Found " : " Not Found " ); } 这⾥的string编译器就认识了,但是strcmp就不认识了呢? ⼀般⼀个C++的⽼的带“。

C语言OutputDebugString与格式化输出函数OutputDebugPrintf案例详解

C语言OutputDebugString与格式化输出函数OutputDebugPrintf案例详解

C语⾔OutputDebugString与格式化输出函数OutputDebugPrintf案例详解OutputDebugString属于windows API的,所以只要是包含了window.h这个头⽂件后就可以使⽤了。

可以把调试信息输出到编译器的输出窗⼝,还可以⽤DbgView(本机或TCP远程)这样的⼯具查看,这样就可以脱离编译器了。

OutputDebugString 默认只能输⼊⼀个参数,不能像printf那样格式化输出,下⾯改造成类似printf函数的输出⽅式。

#include <windows.h>#include <stdio.h>//#include <stdlib.h>#include <stdarg.h>#define IS_USE_OUTPUT_DEBUG_PRINT 1#if IS_USE_OUTPUT_DEBUG_PRINT#define OUTPUT_DEBUG_PRINTF(str) OutputDebugPrintf(str)void OutputDebugPrintf(const char * strOutputString, ...){#define PUT_PUT_DEBUG_BUF_LEN 1024char strBuffer[PUT_PUT_DEBUG_BUF_LEN] = { 0 };va_list vlArgs;va_start(vlArgs, strOutputString);_vsnprintf_s (strBuffer, sizeof(strBuffer) - 1, strOutputString, vlArgs); //_vsnprintf_s _vsnprintf//vsprintf(strBuffer,strOutputString,vlArgs);va_end(vlArgs);OutputDebugStringA(strBuffer); //OutputDebugString // OutputDebugStringW}#else#define OUTPUT_DEBUG_PRINTF(str)#endif使⽤实例:OutputDebugPrintf("DEBUG_INFO | %d %s",600019,"hello");然后在 DbgView 设置⼀个过滤:DEBUG_INFO,抓取固定的输出。

c++string详解assign

c++string详解assign

c++string详解assign assign⽅法可以理解为先将原字符串清空,然后赋予新的值作替换。

返回类型为 string类型的引⽤。

其常⽤的重载也有下列⼏种:a. string& assign ( const string& str );将str替换原字串的内容举例:string testassign = "Hello World";testassign.assign(" home");cout<<testassign<<endl;//打印结果为 homeb. string& assign ( const string& str, size_t pos, size_t n );将str的内容从位置pos起的n个字符作为原字串的新内容赋给原字串string testassign = "Hello World";testassign.assign("Come on!", 5, 2);cout<<testassign<<endl;//打印结果为 onc. string& assign ( const char* s, size_t n );将字符数组或者字符串的⾸n个字符替换原字符串内容举例:string testassign = "Hello World";testassign.assign("go back to China", 7);cout<<testassign<<endl;//打印结果为go backd. string& assign ( const char* s );将字符串或者字符数组作为新内容替换原字串举例:string testassign = "Hello World";char ch[20] = "go back to shanghai";testassign.assign(ch);cout<<testassign<<endl;//打印结果为 go back to shanghaie. string& assign ( size_t n, char c );将原字串替换为n个字符cstring testassign = "Hello World";char ch = '?';testassign.assign(5, ch);cout<<testassign<<endl;//打印结果为f. template <class InputIterator> string& assign ( InputIterator first, InputIterator last );需要include <iterator>举例:string testassign = "Hello World";testassign.assign(istream_iterator<char>(cin), istream_iterator<char>());//输⼊abcdecout<<testassign<<endl;//打印结果为 abcde---------------------------------------------------------------------------------------string& assign ( const string& str );string& assign ( const string& str, size_t pos, size_t n );string& assign ( const char* s, size_t n );string& assign ( const char* s );string& assign ( size_t n, char c );template <class InputIterator>string& assign ( InputIterator first, InputIterator last );Assign content to stringAssigns new content to the string replacing its current content.The arguments passed to the function determine the new content:string& assign ( const string& str );Sets a copy of str as the new content.string& assign ( const string& str, size_t pos, size_t n );Sets a copy of a substring of str as the new content. The substring is the portion of str that begins at the character position pos and takes up to n characters (it takes less than n if the end of str is reached before).string& assign ( const char * s, size_t n );Sets as the new content a copy of the string formed by the first n characters of the array pointed by s.string& assign ( const char * s );Sets a copy of the string formed by the null-terminated character sequence (C string) pointed by s as the new content. The length of the character sequence is determined by the first ocurrence of a null character (as determined by .length(s)).string& assign ( size_t n, char c );Sets a string formed by a repetition of character c, n times, as the new content.template<class InputIterator> string& assign (InputIterator first, InputIterator last);If InputIterator is an integral type, behaves as the previous member function version, effectively setting as the new content a string formed by the repetition first times of the character equivalent to last.In any other case, the content is set to the values of the elements that go from element referred to by iterator first to the element right before the one referred to by iterator last.ParametersstrAnother object of class whose content is entirely or partially copied as the new content for the string.Starting position of the substring of the object str that forms the new content. Notice that the first position has a value of 0, not 1.If the position passed is past the end of str, an out_of_range exception is thrown.nNumber of characters to use for the content (i.e., its length).sArray with a sequence of characters.In the third member function version, the length is determined by parameter n, even including null characters in the content.By contrast, in the fourth member version, s is a null-terminated character, and therefore its length is determined only by the first occurrence of a null character.cCharacter value to be repeated n times to form the new content.startIf along with last, both are integers, it is equivalent to parameter n, otherwise it is an iterator referring to the beginning of a sequence of characters.lastIf along with start, both are integers, it is equivalent to parameter c, otherwise it is an iterator referring to the past-the-end element of a sequence of characters.Return Value*thisExample1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35// string::assign#include <iostream>#include <string>using namespace std;int main (){string str;string base="The quick brown fox jumps over a lazy dog."; // used in the same order as described above:str.assign(base);cout << str << endl;str.assign(base,10,9);cout << str << endl; // "brown fox"str.assign("pangrams are cool",7);cout << str << endl; // "pangram"str.assign("c-string");cout << str << endl; // "c-string"str.assign(10,'*');cout << str << endl; // "**********"str.assign<int>(10,0x2D);cout << str << endl; // "----------"str.assign(base.begin()+16,base.end()-12);cout << str << endl; // "fox jumps over"return 0;}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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的初值。
i) ==,!=,<,<=,>,>=,compare() //比较字符串
j) size(),length() //返回字符数量
k) max_size() //返回字符的可能最大个数
l) empty() //判断字符串是否为空
m) capacity() //返回重新分配之前的字符容量
string包含头文件 <string>中
1.声明一个C++字符串
string类的构造函数和析构函数如下:
a) string s; //生成一个空字符串s
b) string s(str) //拷贝构造函数 生成str的复制品
c) string s(str,stridx) //将字符串str内“始于位置stridx”的部分当作字符串的初值
删除函数erase()的形式也有好几种,替换函数replace()也有好几个。举例吧:
string s=”il8n”;
s.replace(1,2,”nternationalizatio”);//从索引1开始的2个替换成后面的C_string
s.erase(13);//从索引13开始往后全删除
s.push_back(‘a’);//这个函数只能增加单个字符 对STL熟悉的理解起来很简单
s.insert(0,”my name”);
s.insert(1,str);
这种形式的insert()函数不支持传入单个字符,为了插 入单个字符,insert()函数提供了两个对插入单个字符操作的重载函数:
另一个功能强大的比较函数是成员函数compare()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。他返回一个整数来表示比较结果,返回值意义如下:0-相等 〉0-大于 <0-小于。举例如下:
string s(“abcd”);
pare(“abcd”); //返回0
s.erase(7,5);//从索引7开始往后删5个
2.5 更改内容
这在字符串的操作中占了很大一部分。
首先讲赋值,第一个赋值方法当然是使用操作符=,新值可以是string(如:s=ns) 、c_string(如:s=”gaint”)甚至单一字符(如:s=’j’)。还可以使用成员函数assign(),这个成员函数可以使你更灵活的对字符串赋值。还是举例说明吧:
Str.at(Str.length());//throw out_of_range
Cstr.at(Cstr.length()) ////throw out_of_range
不赞成类似于下面的引用或指针赋值:
char&a3];
因为一旦发生重新分配,r,p立即失效。避免的方法就是不使用。
g) string s(num,c) //生成一个字符串,包含num个c字符
h) string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值
i) s.~string() //销毁所有字符,释放内存
2.字符串操作函数
a) =,assign() //赋以新值
2.4比较函数
C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如 str<”hello”)。在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得 比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。同时,string (“aaaa”) <string(aaaaa)。
find_first_of()
find_last_of()
find_first_not_of()
find_last_not_of()
这些函数返回符合搜索条件的字符区间内的第一个字符的索引,没找到目标就返回npos。所有的函数的参
数说明如下:
有一个例外不得不说,const string a;的操作符[]对索引值是a.length()仍然有效,其返回值是’\0’。其他的各种情况,a.length()索引都是无效的。举例如下:
const string Cstr(“const string”);
string Str(“string”);
t) data() //将内容以字符数组形式返回
u) substr() //返回某个子字符串
v)find()//查找函数
w)begin() end() //提供类似STL的迭代器支持
x) rbegin() rend() //逆向迭代器
y) get_allocator() //返回配置器
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(“nico”,5);
s.append(5,’x’);
insert(size_type index,size_type num,chart c)和
insert(iterator pos,size_type num,chart c)
其中size_type是无符号整数,iterator是char*,所以,你这么调用insert函数是不行的:insert(0,1, ’j’);这时候第一个参数将转换成哪一个呢?所以必须这么写:insert((string::size_type)0,1,’j’)!第二种形式指 出了使用迭代器安插字符的形式,在后面会提及。顺便提一下,string有很多操作是使用STL的迭代器的。
b) swap() //交换两个字符串的内容
c) +=,append(),push_back() //在尾部添加字符
d) insert() //插入字符
e) erase() //删除字符
f) clear() //删除全部字符
g) replace() //替换字符
h) + //串联字符串
把字符串清空的方法有三个:s=””;s.clear();s.erase();
string提供了很多函数用于插入(insert)、删除(erase)、替换(replace)、增加字符。
先说增加字符(这里说的增加是在尾巴上),函数有 +=、append()、push_back()。举例如下:
s+=str;//加个字符串
Str[3]; //ok
Str.at(3); //ok
Str[100]; //未定义的行为
Str.at(100); //throw out_of_range
Str[Str.length()] //未定义行为
Cstr[Cstr.length()] //返回 ‘\0’
s.assign(str);
s.assign(str,1,3);//如果str是”iamangel” 就是把”ama”赋给字符串
s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s
s.assign(“nico”,5);//把’n’ ‘I’ ‘c’ ‘o’ ‘\0’赋给字符串
详细介绍:
2.1 C++字符串和C字符串的转换
C ++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy(),其中,data()以字符数组的形式返回字符串内容,但并不添加’\0’。c_str()返回一个以‘\0’结尾的字符数组,而copy()则把字符串的内容复制或写入既有的c_string或 字符数组内。
2.3元素存取
我们可以使用下标操作符[]和函数at()对元素包含的字符进行访问。但是应该注意的是操作符[]并不检查索引是否有效(有效索引0~str.length ()),如果索引失效,会引起未定义的行为。而at()会检查,如果使用 at()的时候索引无效,会抛出out_of_range异常。
n) reserve() //保留一定量内存以容纳一定数量的字符
o) [ ], at() //存取单一字符
p) >>,getline() //从stream读取某值
q) << //将谋值写入stream
r) copy() //将某值赋值为一个C_string
s) c_str() //将内容以C_string返回
2.2 大小和容量函数
一个C++字符 串存在三种大小:a)现有的字符数,函数是size()和length(),他们等效。Empty()用来检查字符串是否为空。b)max_size() 这个大小是指当前C++字符串最多能包含的字符数,很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。我们一般情况下不用关心他,应该大小足够我们用的。但是不够用的话,会抛出length_error异常c)capacity()重新分配内存之前 string所能包含的最大字符数。这里另一个需要指出的是reserve()函数,这个函数为string重新分配内存。重新分配的大小由其参数决定,默认参数为0,这时候会对string进行非强制性缩减。
相关文档
最新文档