精华内容
下载资源
问答
  • C++ 字符数组及字符串处理函数 本篇文章是对C++学习过程中,关于字符串这节部分的内容进行整理,本篇主要讲解以字符数组形式存储的字符串概念,及其相关函数C++标准库提供了兼容C语言的字符串处理函数,其头文件为...

    C++ 字符数组及字符串处理函数

    本篇文章是对C++学习过程中,关于字符串这节部分的内容进行整理,本篇主要讲解以字符数组形式存储的字符串概念,及其相关函数。C++标准库提供了兼容C语言的字符串处理函数,其头文件为 string.h 或者使用 cstring。

    1.字符数组

    用来存放字符型数据的数组成为字符数组,其元素是一个个的字符。
    字符数组的定义形式为:

    char 字符数组名[常量表达式],......;
    例如:
    char s[20];			// 定义字符数组
    char s[4] = {'J', 'a', 'v', 'a'};		// 字符数组初始化
    

    2.字符串的概念

    • C++语言规定字符串是以 ‘\0’(ASCII值为0)字符作为结束符的字符数组。
    • 在程序中可以通过判断数组元素是否为空字符来判断字符串是否结束,换言之,只要遇到数组元素是空字符,就表示字符串在此位置上结束,即使该空字符后还有字符。
    • 由于字符串实际存放在字符数组中,所以定义字符数组时数组的长度至少为字符串长度加1(空字符也要占位)。
    • 字符串常量是字符串的常量形式,它是以一对双引号括起来的字符序列。
    • C++总是在编译时为字符串常量自动在其后增加一个空字符。

    区分“a” 和 ‘a’

    char c; char s[10] = "hello";
    c = 'a';		// 正确
    c = "a";		// 错误
    

    C++语言总是在编译时为字符串常量自动在其后增加一个空字符,例如"Hello"的存储形式为:
    在这里插入图片描述
    如果在字符串常量中插入空字符,则字符串常量的长度会比看到的字符数目少,例如"ABC\0DEF"的存储形式为:
    在这里插入图片描述

    3.字符串的输入和输出

    (1)使用标准输入输出流,将整个字符串一次输入或输出

    char str[80];
    cin >> str;			// 输入字符串
    cout << str;		// 输出字符串
    

    (2)使用字符串输入输出函数

    /* gets函数 */
    char *gets(char *s);		// 函数原型
    
    char str[80];
    gets(str);					// 输入字符串
    

    gets函数输入一个字符串到字符数组s中。s是字符数组或指向字符数组的指针,其长度应该足够大,以便能容纳输入的字符串。

    /* puts函数 */
    int puts(char *s);			// 函数原型
    
    char str[80] = "Programming";
    puts(str);					// 输出字符串
    

    puts函数输出s字符串,遇到空字符结束,输出完后再输出一个换行(’\n’)。s是字符数组或指向字符数组的指针,返回值表示输出字符的个数。输出字符不包括空字符。

    4.字符串处理函数

    (1)字符串复制函数strcpy
    char str1[10], str2[] = "Computer";
    strcpy(str1, str2);				// 复制str2到str1
    
    (2)字符串复制函数strncpy
    char str1[10], str2[] = "Computer";
    strcpy(str1, str2, 4);			// 复制str2的前4个字符到str1
    
    (3)字符串连接函数strcat
    char str1[10] = "ABC", str2[] = "123";
    strcat(str1, str2);				// 在str1后面连接str2,str2未变化
    
    (4)字符串连接函数strncat
    char str1[10] = "ABC", str2[] = "123";
    strcat(str1, str2, 4);			// 将str2前4个字符连接到str1后面
    
    (5)字符串比较函数strcmp
    if (strcmp(str1, str2) == 0) 	// 比较字符串相等
    	......
    if (strcmp(str1, str2) >0)		// str1大于str2,根据字典顺序比较,如aac > aab, a < aa
    	......
    
    (6)计算字符串长度函数strlen
    n = strlen("Language");			// n = 8
    char str[20] = "Visual Basic";
    n = strlen(str);				// n = 12
    
    (7)字符串转换成数值函数
    f = atof("123.456");			// f = 123.456
    i = atoi("-456");				// i = -456
    
    展开全文
  • 字符串可以用字符数组与字符串变量两种方式来存储,效果类似。 一、用字符数组来存储字符串:  char st1[100],st2[100] ; //字符数组说明 cin>>st1>>st2; long a,b; 输入:hello, world 则st1={‘h’,’e’,...
    字符串可以用字符数组与字符串变量两种方式来存储,效果类似。
    一、用字符数组来存储字符串: 
    char st1[100],st2[100] ; //字符数组说明
    cin>>st1>>st2;
    long a,b;
    输入:hello, world
    则st1={‘h’,’e’,’l’,’l’,’o’,’,’,’\0’}
    st2={‘w’,’o’,’r’,’l’,’d’,’\0}
    字符’\0’为字符串结束标志
    1. 字符数组长度 
       strlen(st1); //如a=strlen(st1);b=strlen(st2); 则a=6,b=5
    2. 字符数组比较
       不能直接比较,st1>st2是错误的,要用strcmp()函数
       strcmp(st1,st2); //st1=st2相等则输出0,st1<st2输出-1,st1>st2输出1
       strncmp(st1,st2,n);   把st1,st2的前n个进行比较。
    3. 连接字符数组 
       不能直接用st1=st1+st2;用strcat()函数
       strcat(st1,st2); //将st1和st2连接后赋给st1,本例连接后st1为”hello,world”
       strncat(st1,st2,n);   n表示连接上st2的前n个给st1,在最后不要加'\0'。
    4. 替换
       strcpy(st1,st2); //用st2的值替换st1的值,字符数组不能如此赋值st1=st2或st1[]=st2[]都是错误的
       本例中st1值被替代为”world”
       strncpy(st1,st2,n); n表示复制st2的前n个给st1,在最后要加'\0'。
    5. 其他函数 
    strchr(st1,ch) //ch为要找的字符。如strchr(st1,’e’);会截取出st1中以字母’e’开头的字符串,要用string类型的来存储,如string c1; c1=strchr(st1,’e’); 则c1为”ello”
       strspn(st1,st2); //返回st1起始部分匹配st2中任意字符的字符数。本例中”hello,”中的第一个字符’h’不能在”world”中找到匹配字符,因此返回值为 0。如st1=”rose”;st2=”worse”;则返回值为4,因为rose在worse中都能找到匹配字符。
       strrev(); //颠倒字符串




    二、用字符串来存储字符串 
    string str1,str2; cin>>str1>>str2; 
    //如输入“hello, world”则str1=”hello,” str2=”world”
    可直接赋值: str1=str2;
    1. 字符串长度
       len = str1.length();
    2. 字符串比较 
       可以直接比较,即str1>str2;str1==str2;等
    3. 连接 
       可以直接连接,即str1 += str2;等
    4. 字符串提取 
       str2 = str1.substr(); //str2值被赋值为str1
    str2 = str1.substr(pos1); //如str2=str1.substr(2);则str2=”llo”;
       str2=str1.substr(pos1,len1); //提取指定位置指定长度的字符串,如str2=str1.substr(1,2) ;则str2=”el”
    5. 字符串搜索 
       where = str1.find(str2); //返回str2是在str1中的最先被找到的位置
       where = str1.find(str2,pos1); pos1是从str1的第几位开始。
       where = str1.rfind(str2); 从后往前搜。
    6. 插入字符串 
       不是赋值语句。
       str1.insert(pos1,str2); //如str1.insert(2,str2)则str1=”heworldllo,”
        str1.insert(pos1,str2,pos2,len2);
        str1.insert(pos1,numchar,char); numchar是插入次数,char是要插入的字符。
    7. 替换字符串 
       str1.replace(pos1,str2);
       str1.replace(pos1,str2,pos2,len2);
    8. 删除字符串
       str.erase(pos,len)
       str.clear();
    9. 交换字符串 
       swap(str1,str2);




    注意: 
    1.要包含头文件#include<string>
    2.在有些场合下用字符数组char st1[100]比string st2还好用些,可根据具体情况作不同选择。
    3.在读入一个含有空格的字符串时用cin是不行的(cin读字符串或字符数组时,自动以空格或回车作为分格符)
    展开全文
  • C++字符数组函数深度剖析

    千次阅读 2012-03-31 15:41:14
    函数有两个字符数组的参数,函数的作用是:将第二个字符数组中的字符串连接到前面字符数组的字符串的后面。第二个自负数组被指定为const,以保证该数组中的内容不会在函数调用期间修改。连接后的字符串放在第一个...

    1、   连接函数strcat

    其函数原型为:strcat(char [ ], const char [ ] );

    strcat是string catenate(字符串连接)的缩写。该函数有两个字符数组的参数,函数的作用是:将第二个字符数组中的字符串连接到前面字符数组的字符串的后面。第二个自负数组被指定为const,以保证该数组中的内容不会在函数调用期间修改。连接后的字符串放在第一个字符数组中,函数调用后得到的函数值,就是第一个字符数组的地址。

    例如:

    #include<iostream>

    usingnamespace std;

     

    int main()

    {

      char str1[]="People's Republic of";

      char str2[]="China";

      cout<<strcat(str1,str2);

     

    };

    输出结果为:Perple’s Republic of China

    2、   字符串复制函数

    其函数原型为:

    strcpy ( char[ ] , const char[ ]);

    strcpy是string copy(字符串复制)的缩写。它的作用是将第二个字符数组中的字符串复制到第一个字符数组中去,将第一个字符数组中的相应字符覆盖。

    上例如果调用strcpy(str1,str2);执行后,str2中的五个字符“China”和”\0”,共六个字符都会复制到数组str1中。

    说明:a、在调用strcpy函数时,第一个参数必须是数组名(如str1),第二个参数可以是字符数组名,也可以是一个字符串常量。

    例如:strcpy(str1,”China”);

    b、可以用strcpy函数将一个字符串中前若干个字符复制到字符数组中去。

    例如:strcpy(str1,str2,2);

    作用是将str2中前面两个字符复制到str1中去,然后再加一个’\0’。

    C、只能通过调用strcpy函数来实现将一个字符串赋给一个字符数组,而不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。

    如下非法:

         str1=”China”;     //不能将一个字符串常量赋给一个字符数组

        str1=str2;   //不能将一个字符数组的内容赋给另一个字符数组

    str1代表数组地址,是常量,不能被赋值,不能作左值。

     

    3、   字符串比较函数:strcmp

    函数原型:strcmp( const char [ ], const char[ ]);

    strcmp是string compare(字符串比较)的缩写。作用是比较两个字符串。由于这两个字符数组只参加比较而不应改变其内容,因此两个参数都加上const声明。

    如下声明合法:

    strcmp(str1,str2);

    strcmp(“China”,”Korea”);

    strcmp(str1,”Beijing”);

    比较的结果由函数值带回。

    a、    如果str1=str2,函数值为0。

    b、   如果str1>str2,函数值为一正整数。

    c、    如果str1<str2,函数值为一负整数。

    字符串比较的规则与其他语言中的规则相同,记对两个字符串自左至右逐个自负相比(按ASCII码值大小比较),知道出现不同的字符或遇到’\0’为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。

    不能用以下形式比较:

      if(str1>str2)

       {

         cout<<"yes";

       }

    字符数组名str1str2代表数组地址,上面写法表示将两个数组地址进行比较,而不是对数组中的字符串进行比较。应为:

    if(strcmp(str1,str2)>0)

       {

         cout<<"yes";

       }

    4、 字符串长度函数strlen

    函数原型:strlen(const char [ ]);

    strlen是string length(字符串长度)的缩写。它是测试字符串长度的函数。其函数的值为字符串中的实际长度,不包括’\0’在内。

    例如:char str[10] = “China”;  cout<<strlen(str);

     

     

    应用举例:

    通过函数调用求三个字符串的最大值:

     可以用一个函数max_string来找出n个字符串中的最大者。在main函数中设一个二维的字符数组str,大小为3*30,即三行30列,每行可以容纳30个字符。可以把str[0],str[1],str[2]看作三个一维字符数组,它们各有30个元素。可以把它们如同一维数组那样进行处理。可以用cin分别读入3个字符串。然后调用max_string函数可以得到最大的字符串,把它放在一维字符数组string中,在函数max_string中输出最大的字符串。程序如下:

     

    //============================================================================

    // Name        : C++_array.cpp

    // Author      : yangbo_hbzjk

    // Version     :

    // Copyright   : Your copyright notice

    // Description : Hello World in C++, Ansi-style

    //============================================================================

    #include <iostream>

    #include <string>

    using namespace std;


    int main()

    {

    void max_string(char str[][30],int i);  //函数声明

    int i;

    char coutry_name[3][30];

    for(i=0;i<3;i++)

    {

    cin>>coutry_name[i];       //输入三个国家名

    }

    max_string(coutry_name,3);     //调用max_string函数

    return 0;

    };


    void max_string(char str[][30],int n)

    {

    int i;

    char string[30];

    strcpy(string ,str[0]);       //使string的值为str[0]的值

    for(i=0;i<n;i++)

    {

    if(strcmp(str[i],string)>0)   //如果str[i]>string

    {

    strcpy(string,str[i]);    //将str[i]中的字符串复制到string

    }

    cout<<endl<<"the largest string is:"<<string<<endl;

    }

    }


    展开全文
  • C++ 字符数组字符数组相互赋值

    千次阅读 2019-10-30 10:41:52
    功能:把src所指由NULL结束的字符复制到dest所指的数组中。 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。 例如: #include <iostream> #incl...

    strcpy函数

    原型声明:extern char *strcpy(char *dest,char *src);
    头文件:string.h
    功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
    说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
    返回指向dest的指针。

    例如:

    #include <iostream>
    #include <string.h>
    using namespace std;
    int main()
    {
    	char src[128] = "hello world";
    	char dest[128] = {0};
    	strcpy(dest, src);
    	printf("dest = %s\n", dest);
    	return 0;
    }
    
    展开全文
  • C++ 字符 字符数组 字符串函数

    千次阅读 2013-11-21 22:17:46
    1. 字符数组初始化 char ch[] = {'C', 'h', 'i', 'n', 'a'}; // 数据只占用5个char类型的空间char ch[] = "China"; // 数据占用6个char类型的空间,末尾默认添加'\0' 2. 不能用赋值语句将一个字符串常量或字符...
  • c++关于字符数组的处理函数

    千次阅读 2018-03-31 19:50:12
    字符串连接函数,其功能是将字符数组2中的字符串连接到字符数组1中字符串的后面,并删去字符串1后的串结束标志”\0”。需要注意的是字符数组的长度要足够大,否则不能装下连接后的字符串。 例子: #include &...
  • c++字符数组

    2013-11-03 22:03:16
    字符数组: 一、用字符数组来存储字符串: char st1[100],st2[100] ; //字符数组说明 cin>>st1>>st2; long a,b; 输入:hello, world 则st1={‘h’,’e’,’l’,’l’,’o’,’,’,’\0’} st2={‘w’,’o’,...
  • C++ 字符数组赋值

    千次阅读 2019-04-19 14:41:20
    3、(1)如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预测的; (2)如果花括号中提供的初值个数(即字符个数)大于数组长度,则按语法错误处理; (3)如果花括号中提供的初值...
  • C++ 字符串(string类)函数 首先明确 字符串是从第0位 开始存储的 即 string s="123"; s[0]==1; string ss="0123456789"; string ss2; 1.求长度 int len=ss.length(); //求字符串ss的长度返回值赋给len ...
  • C++中,字符串和字符数组通常会有以下三种表示 char a0[] = {'a','b','c','d','e','f'}; char a[]="abcdef"; char *b = "abcdef"; string c = a; string d = b; //string类可接受char * 和char[]的直接赋值 //...
  • 对于字符数组与字符指针: 1. 以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写"abc",那么编译器帮你存储的是"abc\0". 比如char a1[]="success";与char a2[] = {'s','u','c',...
  • 1、字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。 char str[10]={ ‘I’,’ ‘,‘a’,‘m’,’ ‘,‘h’,‘a’,‘p’,‘p’,‘y’}; 即把10个字符分别赋给str[0]到str...
  • C++ 字符串与字符数组 详解

    万次阅读 多人点赞 2018-03-03 19:28:22
    字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。 下面的声明和初始化创建了一个 “Hello” 字符串。由于在数组的末尾存储了空字符,所以...
  • C++字符数组的定义与初始化

    千次阅读 2015-10-26 21:00:58
    1、字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。 char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'}; 即把10个字符分别赋给str[0]到str[9]10个元素 如果花...
  • code blocks解决中文乱码问题:settings→compiler and debugger→compiler settings→other options→粘贴一条: -fexec-charset=GBK -finput-charset=UTF-8 →OK...1,读取字符串输入,并显示 #include #include
  • 我们知道C、C++中的数组是没有拷贝(复制)运算的,除非编译器支持。因为C语言发明的初衷是替换汇编语言,要知道你用不同指令集的机器就要用不同的汇编语言。。。(此处省略800字议论文)我们想一想,当我们声明定义一个...
  • 字符数组拷贝函数(二)

    千次阅读 2012-12-31 14:47:13
     常用的字符串拷贝函数有strcpy,strncpy,通常将一个字符串拷贝至另一个char*内,无法保证其是一个字符指针还是字符数组指针。比如: char ch = 'C'; char chArr[] = "C++"; char *p = &ch; char *p1 = chArr; ...
  • 一、单个字符间的转换 1. tolower(将单个大写字母转换成单个小写字母) 相关函数isalpha,toupper 表头文件#include<stdlib.h> 定义函数int tolower(int c); 函数说明若参数c为大写字母则将该对应的小写...
  • C/C++中提供了众多的字符串...使用这些函数时,参数必须是以null('\0')结束的字符数组的第一个元素的指针。#include #include using namespace std; //strlen计算字符数组的字符数,以'\0'为结束标志,计算不为'\0
  • C++字符复制函数

    万次阅读 2016-10-20 15:44:28
    今天用到字符串的复制操作,做一个以二进制的形式读一个文件,以16进制写到TXT中,再以十六进制转换成二进制写回原文件。达到复制文件的效果,同时用的是...strcpy:顾名思义,复制一个字符串,函数原型为:1、char * st
  • C++字符串和字符数组

    2019-06-19 11:45:46
    字符串实际上是使用null字符‘\0’终止的一维字符数组。 下面的声明和初始化创建了一个 “Hello” 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 “Hello” 的字符数多一个。 char greeting[6] =...
  • 之前我们学习数据类型的时候,有一个类型 char ,这个类型允许我们在里边放一个字符 char variable1='o';... //C++当中字符数组赋值,''单引号中不能为空 char talk[10]={'I',' ','a','m',' ','h
  • 如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返NULL; strlen(char const* str):用来计算指定字符串 str 的长度,但不包括结束字符(即 null 字符); strcat(str,ptr)...
  • C++字符数组和字符串string

    万次阅读 2014-09-19 22:50:50
    C++字符数组用char str[]可以用来表示一个字符串。 (1) 数组的大小和字符串的长度。 数组的大小一定要大于字符串的长度,因为系统会自动补上一个’\0’作为字符串的结束标志。当然对于未初始化的也补’\0’. #...
  • 01 一维数组 数组,就是把相同数据类型的变量组合在一起而产生的数据集合。 数据就是从某个地址开始连续若干个位置形成的元素集合。 数据类型 数组名[数组大小]; 数组大小必须是整数常量,不可以是变量。 一维...
  • C++数组与字符数组

    2017-08-03 13:27:54
    C++数组数组”是有限个同类型元素的有序集合,这些元素有一个共同的名字,即“数组名”。每个元素以其在数组中的位置区分,位置用“下标”表示。 例如:数列或向量就可以看作一个数组,其中的元素用一个下标...
  • C++字符串处理函数

    2020-12-12 22:05:38
    C++字符串处理函数 C语言和C++提供了一些字符串函数,使得用户能很方便地对字符串进行...strcat函数是有两个字符数组的参数,函数的作用是:将第二个字符数组中的字符串连接到前面字符数组的字符串的后面,第二个字符

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,132
精华内容 28,452
关键字:

c++字符数组复制函数

c++ 订阅