精华内容
下载资源
问答
  • C++ 字符串操作函数

    千次阅读 2017-02-23 17:28:58
    由于字符串使用广泛,C和C++提供了一些字符串函数,包括字符串连接函数strcat,字符串复制函数strcpy,字符串比较函数strcmp,字符串长度函数strlen,在C语言中被定义在string.h中定义。在C++中被定义在cstring和...

    由于字符串使用广泛,C和C++提供了一些字符串函数,包括字符串连接函数strcat,字符串复制函数strcpy,字符串比较函数strcmp,字符串长度函数strlen,在C语言中被定义在string.h中定义。在C++中被定义在cstring和string中。

    关于string.h,cstring和string的区别:

    string.h 是C版本的头文件,包含比如strcpy、strcat之类的字符串处理函数。

    cstring 在C++标准化(1998年)过程中,为了兼容以前,标准化组织将所有这些文件都进行了新的定义,加入到了标准库中,加入后的文件名就新增了一个"c"前缀并且去掉了.h的后缀名,所以string.h头文件成了cstring头文件。所以,string.h,cstring并没有什么太大的区别,小的区别还是有的,在下面就会说到一个不同。

    string 是C++标准定义的头文件,它定义了一个string的字符串类,里面包含了string类的各种操作,如s.size(), s.erase(), s.insert()等。但又包含了老的C版本的字符串操作如strcpy、strcat等,这就相当于,在的文件中除了定义自己的string类之外,还加了一个#include<string.h>一句包含了C版本的字符串操作。

    字符串连接函数 strcat

    函数原型为

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

    stract及string catenate,该函数有两个字符数组参数,注意该函数的第二个参数被声明为const,以保证数组中的内容不会再函数调用期间修改。连接后的字符串放在第一个字符数组中。

     char str1[20] = "chai"; 
     char str2[] = "bubble"; 
     cout<< strcat(str1,str2);
    

    字符串复制函数 strcpy

    函数原型为 :

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

    stract及string copy,该函数将第二个字符数组中的字符串复制到第一个字符数组,如果第一个字符数组中有内容的话,会被覆盖。

    char str1[20] ;
    char str2[] = "chaibubble"; 
    cout<< strcpy(str1,str2);
    

    注意:
    1.strcpy函数第二个参数可以字符串数组名,也可以是一个字符串常量。

    strcpy(str1,"chaibubble");
    

    2.strcpy函数可以将一个字符串中前若干个字符复制到一个字符串数组中。

     strcpy(str1,str2,3);
    

    这个功能在C语言中是可以实现,在<string.h>中定义的strcpy函数支持三个参数的传入,但是在C++中,不管是<cstring>还是<string>都不支持3个参数

    3.如果用字符数组的形式定义字符串,那么该字符串不允许使用赋值符号,因为变量名代表的其实是数组的地址。

    字符串比较函数 strcmp
    函数原型为 :

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

    比如:

    strcpy(str1,str2);
    

    如果字符串1等于字符串2,函数值为0;
    如果字符串1大于字符串2,函数值为正整数;
    如果字符串1小于字符串2,函数值为负整数;

    大小的依据是直到出现第一个不同的字符时,比较该字符的ASCII码大小。

    字符串长度函数 strlen

    函数原型为 :

    strlen(const char[]);
    

    注意输出的是字符串的实际长度,不包括’\0’。

    char str[20] = "chaibubble";
    cout << strlen(str);
    

    此时的输出为10,不是11,也不是20。

    展开全文
  • c++ 字符串相关函数

    千次阅读 2019-03-13 15:30:16
    c: ...2. 字符串复制 头文件:#include &lt;string.h&gt; 和 #include &lt;stdio.h&gt; 原型声明:char *strcpy(char* dest, const char *src); 函数原型:char *strncpy(ch...

    c:

    1. 字符长度

    strlen(str); //从第一个字符计算到0x00机‘\0’

    sizeof(str);

    2. 字符串复制

    头文件:#include <string.h> 和 #include <stdio.h>

    原型声明:char *strcpy(char* dest, const char *src);

    函数原型:char *strncpy(char *dest,char *src,int size_t);

    函数原型:void *memcpy(void *dest, const void *src, size_t n);

    3. 字符串比较

    原型声明:int strcmp(const char *s1,const char *s2);

    原型声明:int strncmp ( const char * str1, const char * str2, size_t n );

    原型声明:void *memcpy(void *dest, const void *src, size_t n);

    4. 字符串附加拼接

    char *strcat(char *dest, const char *src);

    把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除*dest原来末尾的“\0”)。要保证*dest足够长,以容纳被复制进来的*src。*src中原有的字符不变。返回指向dest的指针

    char * strncat(char *dest, const char *src, size_t n);

    把src所指字符串的前n个字符添加到dest所指字符串的结尾处,并覆盖dest所指字符串结尾的'\0',从而实现字符串的连接

    5.查找

     char *strchr(const char *s,char c),

    1.    where = strchr(st,ch)   ch为要找的字符。  
    2.    where = strspn(st1,st2); 查找字符串。  
    3.    where = strstr(st1,st2); 

    c++

    <string>  
    string str;  
    1. 字符串长度  
       len = str.length();  
       len = str.size();  
      
    2. 字符串比较  
       可以直接比较  
       也可以:  
       str1.compare(str2);   
       str1.compare(pos1,len1,str2,pos2,len2); 值为负,0 ,正。  
       nops 长度到完。  
      
    3. 附加  
       str1 += str2;  
       或  
       str1.append(str2);  
       str1.append(str2.pos2,len2);  
         
    4. 字符串提取  
       str2 = str1.substr();  
       str2 = str1.substr(pos1);  
       str2 = str1.substr(pos1,len1);  
       string a=s.substr(0,4);       //获得字符串s中 从第0位开始的长度为4的字  
      
    .符串  
      

    5. 字符串搜索  
      where = str1.find(str2);  
       where = str1.find(str2,pos1); pos1是从str1的第几位开始。  
       where = str1.rfind(str2); 从后往前搜。  
      
    6. 插入字符串  
       不是赋值语句。  
       str1.insert(pos1,str2);  
       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);  
      
    10. C --> C++  
       char *cstr = "Hello";  
       string str1;  
       cstr = cstr;  
       string str2(cstr);  
     
    对于ACMer来说,C的字符串处理要比C++的方便、简单,尽量用C的字符串处理函数。  

    https://www.cnblogs.com/Stephen-Jixing/p/10011053.html

    https://www.cnblogs.com/lidabo/p/3487043.html

    展开全文
  • C++字符串函数

    千次阅读 2019-05-15 18:45:35
    C++ 中通过函数名字的字符串调用函数 C++ 根据字符串 调用同名函数 #include <iostream> #include <map> #include <string> using namespace std; int use_foo1_1(int n) { return n; } int ...

    参考
    C++ 中通过函数名字的字符串调用函数
    C++ 根据字符串 调用同名函数

    #include <iostream>
    #include <map>
    #include <string>
    
    using namespace std;
    
    int use_foo1_1(int n)
    {
    	return n;
    }
    int use_foo1_2(int n)
    {
    	return n - 1;
    }
    int use_foo2_1(int n, int m)
    {
    	return n + m;
    }
    int use_foo2_2(int n, int m)
    {
    	return n * m;
    }
    void test1(void)
    {
    	typedef int(*foo_type)(int); //函数类型由函数返回值类型和参数列表类型决定
    	typedef std::map<std::string, foo_type> foo_map_type;
    	foo_map_type map;
    	map["aaa"] = use_foo1_1;
    	map["bbb"] = use_foo1_2;
    	std::cout << (*map["aaa"])(10) << std::endl;
    	std::cout << (*map["bbb"])(10) << std::endl;
    }
    //由于 map的value部分只能接受一种类型
    // use_foo1_1 和 use_foo2_1 不是同一种类型的函数
    //所以 保存函数的指针 使用 void* 这样就能存储了,
    // 但是通过函数指针调用函数的时候需要把 void* 转换成相对应的指针类型才行
    //所以 一个map结点需要保存2个内容 函数指针和 转换函数的类型说明符号
    void test2(void)
    {
    	typedef int(*foo1_type)(int); //函数类型由函数返回值类型和参数列表类型决定
    	typedef int(*foo2_type)(int, int);
    	typedef std::map<std::string, std::pair<void*, int> > foo_map_type;
    	foo_map_type map;
    	map["aaa"] = std::pair<void*, int>(use_foo1_1, 1);
    	map["bbb"] = std::pair<void*, int>(use_foo2_1, 2);
    	if (map["aaa"].second == 1)
    	{
    		std::cout << (*reinterpret_cast<foo1_type>(map["aaa"].first))(10) << std::endl;
    	}
    	if (map["aaa"].second == 2)
    	{
    		std::cout << (*reinterpret_cast<foo2_type>(map["aaa"].first))(10, 20) << std::endl;
    	}
    	if (map["bbb"].second == 1)
    	{
    		std::cout << (*reinterpret_cast<foo1_type>(map["bbb"].first))(10) << std::endl;
    	}
    	if (map["bbb"].second == 2)
    	{
    		std::cout << (*reinterpret_cast<foo2_type>(map["bbb"].first))(10, 20) << std::endl;
    	}
    }
    
    
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	test2();
    
    
    
    	return 0;
    }
    
    
    展开全文
  • C++字符串复制函数

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

    今天用到字符串的复制操作,做一个以二进制的形式读一个文件,以16进制写到TXT中,再以十六进制转换成二进制写回原文件。达到复制文件的效果,同时用的是多线程,边读边写的操作。

    期间做一个缓冲区用到了字符串的复制,首先想到的是strcpy就用上了,但转回的原文件一直报错打不开,调试了大半天逻辑是没有问题的,只是错在了用strcpy。

    strcpy:顾名思义,复制一个字符串,函数原型为:

    1char * strcpy(char* destination,const char * source);

    你会发现没有对复制字符个数的规定,所以此函数是根据字符串内的’\0’来决定要复制的长度。其后的字符可能就填充了一些其他的东西,达不到自己想要的效果。

    下面列举下常用的字符串复制函数:

    突然发现对字符串函数缺乏系统的了解,所以花了一点时间专门整理下,在此记录之,以方便自己及有需要的人使用。

    C/C++字符串函数的头文件:string.h

    复制函数主要有4个,如下:

    1、char * strcpy(char* destination,const char * source);

    2、char* strncpy(char* destination,const char* source,size_t num);

    3、void * memcpy(void* destination,const void* source,size_t num);

    4、void * memmove(void* destination,const void* source,size_t num);

    功能及用法说明:

    1、strcpy:将由source指针指示的C 字符串(包括结尾字符)复制到destination指针指示的区域中。该函数不允许source和destination的区域有重叠,同时,为了避免溢出,destination区域应该至少和source区域一样大。

    2、strncpy:复制source的前num字符到destination。如果遇到null字符(’\0’),且还没有到num个字符时,就用(num - n)(n是遇到null字符前已经有的非null字符个数)个null字符附加到destination。注意:并不是添加到destination的最后,而是紧跟着由source中复制而来的字符后面。下面举例说明:

    char des[] = “Hello,i am!”;

    char source[] = “abc\0def”;

    strncpy(des,source,5);

    此时,des区域是这样的:a,b,c,\0,\0,i,空格,a,m,!

    \0,\0并不是添加在!的后面。

    这里,需要注意strcpy仅仅复制到null字符就结束了。

    3、memcpy:将source区域的前num个字符复制到destination中。该函数不检查null字符(即将null字符当作普通字符处理),意味着将复制num个字符才结束。该函数不会额外地引入null字符,即如果num个字符中没有null字符,那么destination中相应字符序列中也没有null字符。同strcpy的区别:允许将source中null字符后面的字符也复制到destination中,而strcpy和strncpy则不可以。

    4、memmove:同memcpy完成同样的功能,区别是,memmove允许destination和source的区域有重叠。而其他三个函数不允许。

    例子:char str[] = “This is a test!”;

    memmove(str+2,str+10,4);

    此时,str变成:Thtests a test!

    在C++中,对内存的掌握是尤其重要!

    以下的介绍转自:
    http://www.cnblogs.com/cappuccino/p/4651199.html

    展开全文
  • C++字符串删除函数

    千次阅读 2016-10-30 20:38:38
    简单使用字符串删除函数 int main() {  string str1="abcdefg";  cout  return 0; } int main() {  string str1="abcdefg";  cout  return 0; }
  • 比如对于字符串替换就可以有很多方法来实现,这里主要说一下STL里的WString中的替换,虽然WString自带了一个Replace函数,但是只能替换一次,太不好了,因此单独写了个C++字符串替换函数 C++字符串替换函数代码...
  • C++字符串常见操作函数最全总结!!

    万次阅读 多人点赞 2020-05-16 22:36:50
    在做题过程中经常用到字符串,有时候费了很大力气去写一个函数,结果最后发现C++已经封装好了此类函数。。。所以花点时间总结一下,这里参考了:http://www.cplusplus.com/reference/ 1、构造函数: string str:空串...
  • C++字符串拷贝函数

    千次阅读 2010-05-19 15:42:00
    C++字符串拷贝函数 1. void bcopy(const void *src, void *dest, size_t n);功能: 拷贝n字节内容从src到dest说明: 该函数在内存重叠情况下仍然正常,该函数建议不再使用,而是用memcpy代替返回值: 无2. void *memcpy...
  • C/C++ 字符串处理函数

    千次阅读 2015-05-15 16:11:23
    C/C++ 字符串处理函数【转】   C: 1. 字符串长度  extern int strlen(char *s); //返回s的长度,不包括结束符NULL 2. 字符串比较  extern int strcmp(char *s1,char * s2);  extern int strncmp(char *s1...
  • C++字符串函数参数/函数返回值

    千次阅读 2013-06-02 20:12:11
    //C++字符串函数参数 #include using namespace std; void C (const char *str) { while(*str) { cout *str ; str ++; } cout ; } int main() { char mmm[15] = "mmmmmmm"; char *nnn = "nnnnnnn";
  • C++字符串读入函数(gets&getline)

    千次阅读 2019-08-16 11:08:47
    对于字符串的读入,我们有scanf和cin这两个最为经典的函数,但是我们发现这两个函数如果遇到空格或换行就结束了。可有时我们希望读到空格时不要结束,读到回车在结束。甚至有时我们希望连遇到空格也不结束,直到遇到...
  • c++字符串操作函数

    万次阅读 2012-03-11 19:24:57
    之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。...
  • C++字符串拼接函数stringcat

    千次阅读 2018-01-24 22:00:00
    //p用于存储拼接后的字符串,p0备用 p=new char[strlen(s1)+strlen(s2)+1];//使用new为p申请恰好的堆空间 if(p==NULL){//检测是否申请空间成功 cout!"; } p0=p;//让P0指向P while(*s1){//s1中的元素不为'\0'时继续...
  • C/C++字符串查找函数

    万次阅读 2011-10-08 21:42:44
    C/C++ string库(string.h)提供了几个字符串查找函数,如下: memchr 在指定内存里定位给定字符 strchr 在指定字符串里定位给定字符 strcspn 返回在字符串str1里找到字符串str2里的任意一个...
  • C++字符串的拼接

    万次阅读 多人点赞 2019-08-15 14:18:51
    C++字符串的拼接 字符串拼接是指将两个字符串连接在一起,形成一个更长的字符串 #include <iostream> int main(int argc,const char* argv[]) { std::string str1 = "Hello ;" std::string str2 = "World!...
  • C++每日练笔之字符串连接函数

    千次阅读 2012-05-01 21:33:45
    分别是C语言的C风格字符串C++标准库中的string类。 其中C风格的字符串以字符数组 char*或者char[]来实现, 但是功能很弱,而且很不安全。 标准C++采用类模板的形式来封装字符串,建议使用。 头文件说明
  • C和C++字符串处理函数

    千次阅读 2013-09-12 10:22:07
    1. 字符串长度  strlen(st); 2. 字符串比较  strcmp(st1,st2);  strncmp(st1,st2,n); 把st1,st2的前n个进行比较。 3. 附加  strcat(st1,st2);  strncat(st1,st2,n); n表示连接上st2的前n个给s
  • C++实现字符串分割函数split()

    千次阅读 2020-04-30 22:31:47
    最近遇到了一个字符串分割的问题,在C++的标准库里面没有字符分割函数split()。我想这个问题今后可能还会再遇见,所以使用C/C++中的字符串分割方法完成相应的功能。 需求:对一个字符串进行分割,然后将分割后的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 389,804
精华内容 155,921
关键字:

c++字符串连接函数

c++ 订阅