IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【小白学习C++ 教程】十七、C++ 中的字符数组和字符串常见的函数 -> 正文阅读

[C++知识库]【小白学习C++ 教程】十七、C++ 中的字符数组和字符串常见的函数

@Author:Runsen

字符数组

char mychar[6] = {'H', 'e', 'l', 'l', 'o'};

下面定义的字符串数组在 C/C++ 中的内存表示

#include <iostream>

using namespace std;

int main () {

   char mychar[6] = {'H', 'e', 'l', 'l', 'o'};

   cout << "mychar message: ";
   cout << mychar<< endl;

   return 0;
}

mychar message: Hello

下面是字符数组常见的API函数

strcpy(s1, s2);将字符串 s2 复制到字符串 s1 中。
strcat(s1, s2);将字符串 s2 连接到字符串 s1 的末尾。
strlen(s1)返回字符串 s1 的长度。
strcmp(s1, s2);如果 s1 和 s2 相同,则返回 0;如果 s1<s2,则小于 0;如果 s1>s2,则大于 0。
strchr(s1, ch);返回指向字符串 s1 中第一次出现字符 ch 的指针。
strstr(s1, s2);返回指向字符串 s1 中第一次出现字符串 s2 的指针。

在编程中,有很多情况我们需要将数字转换为字符串或将字符串转换为数字。

#include <iostream>
#include <cstring>

using namespace std;

int main () {

   char str1[10] = "Hello";
   char str2[10] = "World";
   char str3[10];
   int  len ;

   // copy str1 into str3
   strcpy( str3, str1);
   cout << "strcpy( str3, str1) : " << str3 << endl;

   // concatenates str1 and str2  to str4   
   string str4 = strcat( str1, str2);
   cout << "strcat( str1, str2): " << str4 << endl;
   // 这里str1 concatenates 变成HelloWorld
   cout << "strcat( str1, str2): " << str1 << endl;

   // total lenghth of str1 after concatenation
   len = strlen(str1);
   cout << "strlen(str1) : " << len << endl;

   return 0;
}

strcpy( str3, str1) : Hello
strcat( str1, str2): HelloWorld
strcat( str1, str2): HelloWorld
strlen(str1) : 10

String

C++ 中由“std::string”类定义的字符串是字符流到对象中的表示。换句话说,String 类是字符串对象的集合。这个字符串类是 std 命名空间的一部分,在头文件“string.h”中定义。

字符数组是在编译时静态分配的,但字符串是对象,因此可以动态分配。

由于字符数组本质上是静态的,一旦定义它们就不能收缩或扩展。

因此,如果我们有一个大小为 100 的字符数组,并且我将它初始化为单词“Hello”,那么剩余的空间就被浪费了。

Char mystr[100] = “hello”;

在这里,剩下的 95 个位置被浪费了。

与此相反,字符串对象本质上是动态的,并且会占用值的确切空间。

字符数组的性能较快,而字符串较慢。

字符数组几乎没有可以操作它们的函数。但是String 类有很多函数,包括迭代器函数。

这些是字符数组和字符串对象类之间的一些基本区别。

获取字符串的长度

要获取字符串的长度,您可以使用 length 或 size 函数,它们是字符串类的成员,并返回字符串中的字符数:

string my_string1 = "ten chars.";
int len = my_string1.length(); // or .size();

搜索和子串

字符串类支持使用函数 find()、rfind() 和 substr() 进行简单的搜索和子字符串检索。find 成员函数接受一个字符串和一个位置,并从给定位置开始搜索字符串以查找给定字符串的第一次出现。它返回字符串第一次出现的位置

find()

字符串类支持使用函数 find()、rfind() 和 substr() 进行简单的搜索和子字符串检索。find 成员函数接受一个字符串和一个位置,并从给定位置开始搜索字符串以查找给定字符串的第一次出现。它返回字符串第一次出现的位置,或者一个特殊值:string::npos,表示它没有找到子字符串。

此示例代码在给定字符串中搜索字符串“cat”的每个实例并计算实例总数:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string input;
    int i = 0;
    int cat_appearances = 0;

    getline(cin, input, '\n');

    for (i = input.find("cat", 0); i != string::npos; i = input.find("cat", i))
    {
        cat_appearances++;
        i++;
    }
    cout << cat_appearances;
}
catcatcatcat
4

substr

在 C++ 中,std::substr()该函数接受两个值pos和len作为参数,并返回一个新构造的字符串对象,其值初始化为该对象的子字符串的副本。复制字符串从pos开始并完成直到pos+len表示[pos, pos+len)

#include <iostream>
using namespace std;
  
int main()
{
    string s1 = "Runsen";
  
   
    string r = s1.substr(1, 3);
    string r1 = s1.substr(3,2);
  
    // prints the result
    cout << "String is: " << r << endl;
    cout << "String is: " << r1 << endl;
  
    return 0;
}

String is: uns
String is: se

此外,C++ 库中有大量预定义的函数。

输入功能:

  • getline():该函数用于存储用户在对象内存中输入的字符流。
  • push_back():该函数用于在字符串的末尾输入一个字符。
  • pop_back():该函数用于删除字符串的最后一个字符。

容量功能:

  • capacity() :- 该函数返回分配给字符串的容量,该容量可以等于或大于字符串的大小。分配了额外的空间,以便在将新字符添加到字符串时,可以有效地完成操作。
  • resize() :- 这个函数改变字符串的大小,大小可以增加或减少。
  • length():-该函数求字符串的长度
  • shrink_to_fit() :- 该函数减少字符串的容量,使其等于字符串的最小容量。如果我们确定不需要进一步添加字符,则此操作可用于节省额外内存。

迭代器函数:

  • begin() :- 这个函数返回一个迭代器到字符串的开头。
  • end() :- 这个函数返回一个迭代器到字符串的末尾。
  • rbegin() :- 此函数返回一个指向字符串末尾的反向迭代器。
  • rend() :- 该函数返回一个指向字符串开头的反向迭代器。

操作函数:

  • copy(“char array”, len, pos) :- 该函数复制其参数中提到的目标字符数组中的子字符串。它需要 3 个参数,目标字符数组,要复制的长度和开始复制的字符串中的起始位置。
  • swap() :- 此函数将一个字符串与另一个字符串交换。

练习:给定字符串的打印出所有子字符串的程序

#include <iostream>
using namespace std;
 
void subString(string s, int n)
{
   //在外循环中选择起始点,并为给定的起始点选择不同字符串的长度
    for (int i = 0; i < n; i++)
        for (int len = 1; len <= n - i; len++)
            cout << s.substr(i, len) << endl;
}
 
int main()
{
    string s = "abc";
    subString(s,s.length());
    return 0;
}

a
ab
abc
b
bc
c
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 17:19:59  更:2021-08-03 17:20:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 18:50:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码