C++字符串操作整理

C++字符串操作函数整理1.概述

之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用=进行赋值操作,==进行比较,+做串联。我们尽可以把它看成是C++的基本数据类型。

首先,为了在我们的程序中使用string类型,我们必须包含头文件。如下:#include//注意这里不是string.hstring.h是C字符串头文件。

1.1声明一个C++字符串声明一个字符串变量很简单:stringStr;这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str初始化为一个空字符串。String类的构造函数和析构函数如下:

表1-1C++String类构造函数与析构函数strings;生成一个空字符串sstrings(str)拷贝构造函数生成str的复制品strings(str,stridx)将字符串str内"始于位置stridx"的部分当作字符串的初值strings(str,stridx,strlen)将字符串str内"始于stridx且长度顶多strlen"的部分作为字符串的初值strings(cstr)将C字符串作为s的初值strings(chars,chars_len)将C字符串前chars_len个字符作为字符串s的初值。strings(num,c)生成一个字符串,包含num个c字符strings(beg,end)以区间beg;end(不包含end)内的字符作为字符串s的初值s.~string()销毁所有字符,释放内存

1.2字符串操作函数

这里是C++字符串的重点。表1-2C++字符串操作函数=,assign()赋以新值swap()交换两个字符串的内容+=,append(),push_back()在尾部添加字符insert()插入字符erase()删除字符clear()删除全部字符replace()替换字符+串联字符串==,!=,<,<=,>,>=,compare()比较字符串size(),length()返回字符数量max_size()返回字符的可能最大个数empty()判断字符串是否为空capacity()返回重新分配之前的字符容量reserve()保留一定量内存以容纳一定数量的字符[],at()存取单一字符>>,getline()从stream读取某值

2.1C++字符串和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*上去。

2.3元素存取我们可以使用下标操作符[]和函数at()对元素包含的字符进行访问。但是应该注意的是操作符[]并不检查索引是否有效(有效索引0~str.length()),如果索引失效,会引起未定义的行为。而at()会检查,如果使用at()的时候索引无效,会抛出out_of_range异常。

有一个例外不得不说,conststringa;的操作符[]对索引值是a.length()仍然有效,其返回值是’\0’。其他的各种情况,a.length()索引都是无效的。举例如下:

conststringCstr("conststring");stringStr("string");Str[3];//okStr.at(3);//okStr[100];//未定义的行为Str.at(100);//throwout_of_rangeStr[Str.length()]//未定义行为Cstr[Cstr.length()]//返回‘\0’Str.at(Str.length());//throwout_of_rangeCstr.at(Cstr.length())////throwout_of_range

我不赞成类似于下面的引用或指针赋值:char&r=s[2];char*p=&s[3];因为一旦发生重新分配,r,p立即失效。避免的方法就是不使用。2.4比较函数

C++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如str<"hello")。在使用>,>=,<,<=这些操作符的时候是根据"当前字符特性"将字符按字典顺序进行逐一的比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。同时,string("aaaa")

另一个功能强大的比较函数是成员函数compare()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。他返回一个整数来表示比较结果,返回值意义如下:0相等〉0大于<0小于。举例如下:

strings("abcd");s.compare("abcd");//返回0s.compare("dcba");//返回一个小于0的值s.compare("ab");//返回大于0的值s.compare(s);//相等s.compare(0,2,s,2,2);//用"ab"和"cd"进行比较小于零s.compare(1,2,"bcx",2);//用"bc"和"bc"比较。

后面有更个性化的比较算法,使用的是STL的比较算法。

2.5更改内容这在字符串的操作中占了很大一部分。首先讲赋值,第一个赋值方法当然是使用操作符=,新值可以是string(如:s=ns)、c_string(如:s="gaint")甚至单一字符(如:s=’j’)。还可以使用成员函数assign(),这个成员函数可以使你更灵活的对字符串赋值。还是举例说明吧:

表2-1字符串赋值函数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()。举例如下:

表2-2字符串拼接函数s+=str;加个字符串s+="mynameisjiayp";加个C字符串

合集下载

c语言字符串拼接并返回

c语言字符串拼接并返回

c语言字符串拼接并返回在C语言中,字符串拼接可以使用strcat函数实现。

strcat函数需要两个参数,第一个参数是目标字符串,第二个参数是源字符串。

strcat函数会将源字符串拼接到目标字符串的末尾,并返回目标字符串的地址。

下面是一个简单的示例代码,演示如何使用strcat函数拼接两个字符串并返回结果:```cinclude <>include <>char my_strcat(char dest, const char src) {char result = dest;while (dest) {dest++;}while (dest++ = src++);return result;}int main() {char str1[100] = "Hello, ";char str2[] = "world!";char str3 = my_strcat(str1, str2);printf("%s\n", str3); // 输出 "Hello, world!"return 0;}```在上面的代码中,我们定义了一个自定义的strcat函数my_strcat,它接受两个参数:目标字符串和源字符串。

在函数中,我们首先将result指针指向目标字符串的起始地址,然后使用while循环找到目标字符串的末尾。

接下来,我们使用另一个while循环将源字符串的每个字符复制到目标字符串的末尾,直到源字符串结束。

最后,我们返回result指针指向的地址,即拼接后的字符串的起始地址。

在main函数中,我们定义了两个字符串str1和str2,然后调用my_strcat 函数将它们拼接在一起,并将结果存储在str3中。

最后,我们使用printf 函数输出拼接后的字符串。

c语言字符串子串提取

c语言字符串子串提取

c语言字符串子串提取在C语言中,字符串子串的提取是一个常见的问题。

字符串是C 语言中一个非常重要的数据类型,它可以存储一个或多个字符,我们可以使用字符串来表示文本数据。

而子串则是字符串的一个部分,我们可以将一个字符串按照一定规则拆分成多个子串。

字符串子串的提取可以用来解决很多问题,比如说字符串匹配。

在字符串匹配问题中,我们需要判断一个字符串是否包含另一个字符串。

这时我们就可以将字符串按照一定规则拆分成多个子串,然后逐个比较这些子串和另一个字符串是否匹配。

提取子串的方法有很多种,下面我们来了解其中两种常用的方法。

一、使用数组下标提取子串在C语言中,可以使用数组下标来提取字符串的子串。

数组下标就是字符串中每个字符的位置,我们可以通过访问每个字符的位置来提取子串。

假设有一个字符串str,我们要提取其中的子串,可以使用以下的代码:```cchar str[100] = "hello world";char sub[20];int start, end;start = 4;end = 9;int i, j = 0;for(i = start; i <= end; i++){sub[j] = str[i];j++;}sub[j] = '\0'; // 一定要在最后加上 '\0',表示字符串结束```上面的代码中,我们使用了两个数组,一个是原始字符串str,另一个是用来存储子串的数组sub。

我们同时使用了两个变量start和end来表示要提取的子串的开始和结束位置。

在循环中,我们遍历了从start到end位置上的每个字符,并将其拷贝到子串数组中。

需要注意的是,在拷贝完所有字符后,我们还要在子串数组的结尾处加上一个 '\0',表示这是一个以'\0'结尾的字符串。

这是因为C 语言中的字符串是以'\0'结尾的,如果没有加上这个字符,该字符串将不能作为一个字符串来处理。

c语言中char用法

c语言中char用法

c语言中char用法在C语言中,char是一种数据类型,用来表示字符。

char类型变量可以存储一个ASCII字符,具体占用一个字节的内存空间,范围为-128到127(有符号)或0到255(无符号)。

使用char类型可以进行以下操作和用途:1.定义字符变量:可以用来存储一个字符,例如:char ch = 'A';表示将字符'A'存储到变量ch中。

2.输出字符:可以使用printf函数的%c格式说明符来输出char类型变量的值,例如:printf("%c", ch);将输出变量ch中存储的字符。

3.字符串操作:多个char类型的字符可以连续存储,形成一个字符串。

可以使用char数组来存储字符串,并通过指针来操作和访问字符串中的字符。

4.字符串输入输出:可以使用标准库函数scanf和printf来输入和输出字符串,需要用%s格式说明符,例如:scanf("%s", str);可以输入一个字符串,并将其存储到str数组中。

5.字符比较:可以使用关系运算符(如==、!=、>、<、>=、<=)对char类型的字符进行比较,根据字符的ASCII码值进行比较。

6.字符类型转换:可以将一个整数类型的值转换为char类型(字符型),或者将char类型的值转换为整数类型。

可以通过强制类型转换来实现。

需要注意的是,char类型变量在内存中被存储为对应的ASCII码值,但在输出时会被作为字符进行显示。

同时,由于char类型变量的范围较小,当对负数进行操作时,可能会发生溢出或截断的现象。

除了上述用法,还可以通过char类型变量进行位操作,例如使用按位与(&)、按位或(|)等操作来处理字符的二进制表示。

总之,char类型在C语言中用于表示字符,具备存储和操作字符的能力,同时也可以用来表示字符串及进行字符串操作。

c中字符串的几种定义方法及说明

c中字符串的几种定义方法及说明

c中字符串的几种定义方法及说明C语言中字符串是一种由字符组成的数据类型,用于存储和操作文本信息。

在C语言中,字符串的定义方法有以下几种:1. 字符数组定义字符串在C语言中,字符串通常使用字符数组来定义。

字符数组是一种连续存储多个字符的容器,可以用来表示字符串。

定义字符数组时,需要指定数组的大小,以容纳字符串的长度。

例如:```cchar str1[10] = "Hello";```上述代码中,定义了一个字符数组`str1`,大小为10。

初始化时,将字符串"Hello"存储在`str1`中。

2. 字符指针定义字符串除了使用字符数组,C语言中还可以使用字符指针来定义字符串。

字符指针指向一个字符数组的首地址,通过改变指针的指向,可以实现对字符串的操作。

例如:```cchar *str2 = "World";```上述代码中,定义了一个字符指针`str2`,并将其指向字符串"World"的首地址。

3. 动态分配内存定义字符串在C语言中,还可以使用动态分配内存的方式定义字符串。

动态分配内存使用`malloc`函数在堆内存中分配空间,并返回指向该空间的指针。

例如:```cchar *str3 = (char *)malloc(20 * sizeof(char));strcpy(str3, "Welcome");```上述代码中,使用`malloc`函数动态分配了20个字符的空间,并将字符串"Welcome"复制到了该空间中。

4. 字符串常量在C语言中,字符串常量是由双引号括起来的字符序列。

字符串常量可以直接在代码中使用,无需定义变量。

例如:```cprintf("Hello World");```上述代码中,直接输出了字符串常量"Hello World"。

c字符串生成规律密码

c字符串生成规律密码

c字符串生成规律密码标题:C字符串生成规律密码简介:本文将介绍如何使用C语言生成规律密码的方法。

通过给定的规则和基本的字符串操作,我们可以创建出强大且易记的密码。

第一节:密码的生成规则在创建密码之前,我们需要确定生成密码的规则。

以下是一些常见的密码规则:1. 包含大小写字母、数字和特殊字符。

2. 至少包含8个字符。

3. 避免使用常见的词语或个人信息。

4. 定期更换密码。

第二节:C语言字符串操作在C语言中,我们可以使用字符串存储和操作密码。

下面是一些常见的字符串操作函数:1. strcpy:用于将一个字符串复制到另一个字符串中。

2. strcat:用于将一个字符串连接到另一个字符串的末尾。

3. strlen:用于计算字符串的长度。

4. strcmp:用于比较两个字符串是否相等。

第三节:生成密码的方法1. 随机密码生成:我们可以使用随机函数生成随机字符,并根据规则拼接成密码。

需要注意的是,生成的密码可能不易记,需要妥善保存。

2. 规律密码生成:我们可以使用循环和条件语句生成符合规律的密码。

例如,可以根据规则设定密码的长度或特定字符的位置。

示例代码:```c#include <stdio.h>#include <stdlib.h>#include <time.h>#define PASSWORD_LENGTH 8// 生成随机字符char generateRandomChar() {int random = rand() % 94 + 33; // 可选的 ASCII 字符范围为33-126return (char)random;}// 生成随机密码void generateRandomPassword() {char password[PASSWORD_LENGTH + 1];srand(time(0));for (int i = 0; i < PASSWORD_LENGTH; i++) {password[i] = generateRandomChar();}password[PASSWORD_LENGTH] = '\0'; // 字符串结尾printf("随机密码:%s\n", password);}int main() {generateRandomPassword();return 0;}```结论:通过以上方法,我们可以使用C语言生成符合规律的密码。

string的常用方法

string的常用方法

string的常用方法string类(字符串类)是C++语言中的一种内置类型,它拥有一些非常有用的方法,可以用来检索特定字符串的信息,是字符串操作中很重要的一类函数。

String类的常用方法有:1、length():返回字符串的长度(字符数)。

2、empty():如果字符串为空,返回true,否则返回false。

3、at():返回指定索引处的字符。

4、substr():返回从指定索引开始指定长度的子字符串。

5、find():在当前字符串中查找输入字符串,返回位置索引。

6、replace():在当前字符串中查找替换指定字符,并返回结果字符串。

7、append():在字符串的末尾添加输入的字符串,并返回结果字符串。

8、push_back():在字符串末尾添加一个字符。

9、pop_back():从字符串末尾删除一个字符。

10、begin():返回指向字符串开头的迭代器。

11、end():返回指向字符串末尾的迭代器。

12、insert():在字符串的指定位置插入指定个数的字符。

13、erase():从字符串的指定位置删除指定个数的字符。

14、resize():更改字符串的大小,入输入的新长度。

15、compare():比较两个字符串的大小,若相等返回0,前者大于后者返回1,反之返回-1。

16、swap():交换两个字符串的内容。

17、c_str():返回字符串中存储的C字符串。

18、data():和c_str() 方法类似,但不以空字符\0 结尾。

String类的非常用方法有:1、copy():复制字符串,返回复制结果。

2、assign():复制字符串,并返回复制结果。

3、getline():从字符流中读取一行。

4、find_first_of():在当前字符串中查找输入字符串的第一次出现,并返回位置索引。

5、find_last_of():在当前字符串中查找输入字符串的最后一次出现,并返回位置索引。

6、rfind():从字符串的末尾开始查找指定的子字符串,并返回位置索引。

c语言字符串定义规则

c语言字符串定义规则C 语言中的字符串定义规则如下:1. 使用字符数组定义字符串,在 C 语言中,字符串通常被定义为字符数组。

例如,char str[10] = "Hello"; 这里定义了一个长度为 10 的字符数组,并初始化为 "Hello"。

注意,字符串的长度应该比字符数组的长度小 1,因为 C 字符串以空字符 '\0' 结尾。

2. 使用指针定义字符串,也可以使用指针来定义字符串。

例如,char str = "Hello"; 这里定义了一个指向字符串常量 "Hello" 的指针。

需要注意的是,这种定义方式创建的字符串是常量字符串,不能修改其内容。

3. 字符串的初始化和赋值,可以使用赋值运算符或者 strcpy() 函数来初始化和赋值字符串。

例如,str = "Hello"; 或者strcpy(str, "Hello"); 这两种方式都可以用来给字符串赋值。

4. 字符串的输入,可以使用 scanf() 函数来从键盘输入一个字符串,或者使用 gets() 函数来从标准输入流中读取一个字符串。

5. 字符串的输出,可以使用 printf() 函数来将字符串输出到屏幕上,或者使用 puts() 函数来输出一个字符串并在末尾添加换行符。

总之,在 C 语言中,字符串可以通过字符数组或者指针来定义,并且可以使用一系列函数来操作字符串,比如字符串的复制、连接、比较等。

需要注意的是,在操作字符串时要确保不会越界访问,并且要注意字符串的结束符 '\0'。

c语言字符串实例

c语⾔字符串实例例⼦:涉及字符串、字符、指针、++等例⼀:字符串与字符#include <stdio.h>void reverse(char *str){char *end=str;printf("%c\n",*str); //结果是a//printf("%s",*str); //以字符串输出,有错误printf("%s\n",str); //这样输出字符串是对的printf("%c\n",*end);printf("%s\n",end);printf("%c\n",*str+1); //结果是b}int main(){reverse("abcdef");return0;}例⼆:统计字符串单词的个数【如何去掉空格的问题】#include "stdio.h"int count_word(char *str);void main(){char str1[80];int sum=0;puts("please enter a string");gets(str1);sum=count_word(str1); //返回的count就是sumprintf("there are %d words in this sentence",sum);}int count_word(char *str){int count,flag;char *p;count=0;flag=0;p=str;while(*p!='\0')/*当字符串没有到结尾的时候,重头到尾的循环*/{if(*p=='')/*假如字符串遇到空格,就将flag清零,同时可以过滤掉多余的空格*/flag=0;else if(flag==0)/*当字符串不是空格时,假如flag为0,那么计算器加1,既是遇到空格后的第⼀个字符时*/ {flag=1;/*将flag标记回1,这样在遇到第⼀个字符后的字符时可以将他过滤掉,直到遇到空格时,在清零*/ count++; //count就是统计单词数的变量。

c 语言 字符串去掉后面的回车符号

1. 介绍C语言字符串C语言是一种通用的、过程性的编程语言,其核心是面向计算机体系结构和内存管理。

在C语言中,字符串是由一系列字符组成的数据类型,用来表示文本。

2. 字符串的特点在C语言中,字符串是以'\0'(空字符或者空值)结尾的一系列字符。

字符串可以用字符数组来表示,也可以用指针来表示。

3. 问题的提出在C语言中处理字符串时,经常会遇到需要去掉字符串末尾的回车符号的情况。

回车符号通常在用户输入的时候会包含在字符串中,但在实际处理中,我们往往不需要它。

需要写一个函数来去掉字符串末尾的回车符号。

4. 去掉字符串末尾的回车符号的方法在C语言中,可以通过一些常用的方法来去掉字符串末尾的回车符号,如下所示:- 方法一:使用strlen()函数找到字符串的长度,然后将最后一个字符改为'\0'。

- 方法二:逐个遍历字符串,找到末尾的回车符号位置,然后将其改为'\0'。

5. 方法一的实现步骤(1)使用strlen()函数找到字符串的长度。

(2)将最后一个字符改为'\0'。

6. 方法二的实现步骤(1)逐个遍历字符串,找到末尾的回车符号位置。

(2)将其改为'\0'。

7. 代码示例下面是使用方法一和方法二的代码示例:方法一:```c#include <stdio.h>#include <string.h>void removeNewLine(char *str) {int len = strlen(str);if (str[len - 1] == '\n') {str[len - 1] = '\0';}}char str1[] = "Hello\n";removeNewLine(str1);printf("After removing new line: s\n", str1); return 0;}```方法二:```c#include <stdio.h>#include <string.h>void removeNewLine(char *str) {int len = strlen(str);for (int i = 0; i < len; i++) {if (str[i] == '\n') {str[i] = '\0';break;}}}char str1[] = "Hello\n";removeNewLine(str1);printf("After removing new line: s\n", str1);return 0;}```8. 总结在C语言中,去掉字符串末尾的回车符号是一个常见的需求。

c语言字符串读取方式

c语言字符串读取方式在C语言中,字符串是由一系列字符组成的字符数组。

常用的字符串读取方式有以下几种:1. 使用scanf函数读取字符串scanf函数是C语言中用于输入的标准库函数,可以使用它来读取用户输入的字符串。

在读取字符串时,可以使用%s格式控制符来指定读取字符串的格式。

例如,我们可以使用以下代码从用户输入中读取字符串,并存储在一个字符数组中:```char str[100];printf("请输入一个字符串:");scanf("%s", str);```2. 使用gets函数读取字符串gets函数是C语言中用于读取一行字符串的函数。

它可以从标准输入中读取一行字符,直到遇到换行符为止,并将其存储在指定的字符数组中。

例如,我们可以使用以下代码从用户输入中读取一行字符串,并存储在一个字符数组中:```char str[100];printf("请输入一个字符串:");gets(str);```需要注意的是,gets函数存在安全性问题,因为它无法检查输入的字符串长度,容易导致缓冲区溢出。

因此,在实际编程中,不推荐使用gets函数,而是使用更安全的fgets函数。

3. 使用fgets函数读取字符串fgets函数是C语言中用于读取一行字符串的函数,相比于gets函数,它更加安全。

fgets函数可以指定要读取的最大字符数,防止缓冲区溢出。

例如,我们可以使用以下代码从用户输入中读取一行字符串,并存储在一个字符数组中:```char str[100];printf("请输入一个字符串:");fgets(str, sizeof(str), stdin);```需要注意的是,fgets函数会将换行符也读取进来,因此在处理字符串时需要注意去除换行符。

4. 使用sscanf函数读取字符串sscanf函数是C语言中用于从字符串中读取数据的函数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档