文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++字符数组、字符数组指针和string类怎么用

2023-06-29 10:51

关注

今天小编给大家分享一下C++字符数组、字符数组指针和string类怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

C++字符数组、字符数组指针和string类怎么用

C++中字符串的表示方式有很多种,根据自己目前掌握的有三种:

上面几种方式各有优点和缺点,按照自己的观点,如果处理的字符串的任务比较简单,则使用前两种方法所占用内存小,因而较为实用;如果需要进行字符串拼接和比较等功能,则使用string类比较合适,因为字符数组不含有处理函数。

1、字符数组和字符数组的指针

定义字符数组即使用char类型,字符数组的声明和初始化例子如下:

char duckWords[5] = "Eat";

给字符数组定义指针的语法如下,字符数组名依旧表示首地址:

char *pointerWords = duckWords;

字符数组和字符数组指针的使用方式,和普通数组与普通数组指针的使用方式完全相同:

printf("%c \n", duckWords[5]);printf("%c \n", *pointerWords);

需要注意的是,字符串的以“\0”结尾,所以对于“Say it”这个字符串实际上含有7个字符,因为表示字符串结尾标志的”\0“是自动添加的。此外,字符串创建含有多种语法,比较重要的一点是初始化时可以不指定数组长度:

char duckName[6]={'D','a','v', 'i', 'd'};char duckName[6]="David";char duckName[] = "David";

2、标准库string类

从面向对象的角度看,string类才是更符合字符串操作的。必须注意,string是一个类而不是基本数据类型。

string类的功能主要体现在下面三个发面:

下面的第一个例子采用“+”运算符进行字符串拼接:

string duckName = "David";string duckAge = " 12"; string duckDescribe = duckName + duckAge; /// 需要使用string.c_str()才能输出完整字符串 printf("%s \n", duckDescribe.c_str());

第二个例子是使用string的成员函数length()进行字符串长度统计:

string duckName = "David";printf("%d \n", duckName.length());

当然,string类重载的操作符和含有的成员函数还有很多,但是使用方法都是类似的,不属于语法范畴,所以不做具体介绍。

3、补充

3.1C++自带string类的常用方法

  #include<iostream>   #include<string>   using namespace std;      int main()   {       string str1 = "hello";       string* str2 = new string("hello");      string str3 = "world";      //获取字符串长度     int length = str1.length();     cout << "调用str.length()函数获取字符串长度:" << length << endl;     cout << endl;         //字符串连接      string str4 = str1 + str3;      cout << "字符串连接结果:" << str4 << endl;      cout << endl;          //字符串比较      if (str1 < str3)          cout << "字符串比较:" << "str1<str2" << endl;      cout << endl;      //获取字符串的第一个字符      string::const_iterator it = str1.begin();      cout << *it << endl;      cout << endl;          //获取字符串的最后一个字符     it = str1.end();//end是指向最后一个字符后面的元素,而且不能输出,所以cout << *it << endl;这样输出会报错      it--;      cout << *it << endl;      cout << endl;       //倒置串     reverse(str1.begin(), str1.end());   cout << "倒置串:" << str1 << endl;    cout << endl;     //字符串转字符数组     //不推荐的用法,但是需要了解    string a = "abc123";     const char *b;//这里必须为const char *,不能用char *,不然下一句会报错     b = a.c_str();     cout << "a:" << a << endl;     cout << "b:" << b << endl;     a = "asd456";     cout << "a:" << a << endl;     cout << "b:" << b << endl;      //推荐用法      string c = "abc123";     char *d = new char[20];      strcpy(d, c.c_str());//因为这里没有直接赋值,所以指针类型可以不用const char *    cout << "c:" << c << endl;      cout << "d:" << d << endl;     c = "asd456";      cout << "c:" << c << endl;    cout << "d:" << d << endl;    cout << endl;        //查找串     //find-从指定位置起向后查找,直到串尾      string st1("babbabab");    cout << st1.find('a') << endl;//1,默认从位置0(即第1个字符)开始查找     cout << st1.find('a', 2) << endl;//4   在st1中,从位置2(b,包括位置2)开始,查找a,返回首次匹配的位置     cout << (st1.find('c', 0) == -1) << endl;//1       cout << (st1.find('c', 0) == 4294967295) << endl;//1   两句均输出1,原因是计算机中-1和4294967295都表示为32个1(二进制)     string st2("aabcbcabcbabcc");     str1 = "abc";     cout << st2.find(str1, 2) << endl;//6,从st2的位置2(b)开始匹配,返回第一次成功匹配时匹配的串(abc)的首字符在st2中的位置,失败返回-1      cout << st2.find("abcdefg", 2, 3) << endl;//6   取abcdefg得前3个字符(abc)参与匹配,相当于st2.find("abc", 2)       //rfind-从指定位置起向前查找,直到串首     cout << st1.rfind('a', 7) << endl;//6       //find_first_of-在源串中从位置pos起往后查找,只要在源串中遇到一个字符,该字符与目标串中任意一个字符相同,就停止查找,返回该字符在源串中的位置;若匹配失败,返回-1      string str6("bcgjhikl");     string str7("kghlj");     cout << str6.find_first_of(str7, 0) << endl;//2,从str1的第0个字符b开始找,g与str2中的g匹配,停止查找,返回g在str1中的位置2          //find_last_of-与find_first_of函数相似,只不过查找顺序是从指定位置向前     string str("abcdecg");     cout << str.find_last_of("hjlywkcipn", 6) << endl;//5,从str的位置6(g)开始向前找,g不匹配,再找c,c匹配,停止查找,返回c在str中的位置5     //find_first_not_of-在源串中从位置pos开始往后查找,只要在源串遇到一个字符,与目标串中的任意字符都不相同,就停止查找,返回该字符在源串中的位置;若遍历完整个源串,都找不到满足条件的字符,则返回-1     cout << str.find_first_not_of("kiajbvehfgmlc", 0) << endl;//3   从源串str的位置0(a)开始查找,目标串中有a,匹配,..,找d,目标串中没有d(不匹配),停止查找,返回d在str中的位置3        //find_last_not_of-与find_first_not_of相似,只不过查找顺序是从指定位置向前     cout << str.find_last_not_of("kiajbvehfgmlc", 6) << endl;//3      system("pause");     return 0;  }

 运行结果:

C++字符数组、字符数组指针和string类怎么用

以上就是“C++字符数组、字符数组指针和string类怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯