首页 > 编程语言 >C++ char String

C++ char String

时间:2023-10-24 20:44:48浏览次数:46  
标签:字符 String s1 C++ char 字符串 include string

C++ char string

目录

字符char

占据一个字节的内存空间,并可用于存储ASCII字符集中的字符,包括数字、字母、标点符号

C语言风格的字符串

单个字符是单引号  char s= '';     //单引号
字符数组是双引号  char s[]=" ";   //双引号

字符数组遍历

char str[] = "Hello, World!";

// 遍历字符串并输出每个字符
for (int i = 0; str[i] != '\0'; ++i) {
    cout << str[i] << " ";
}
cout << endl;

基本函数

C++提供了一些与char类型相关的函数,用于处理字符数据

isalpha()   判断字符是否为字母字符
isdigit()   判断字符是否为数字字符
tolower()  将字符转换为小写字母。
toupper()  将字符转换为大写字母。
#include <string>
#include <iostream>
#include <cctype>
using namespace std;

int main(int argc, char const *argv[])
{

    char ch = 'A';
    char lowercaseCh = tolower(ch);
    cout << "Lowercase character: " << lowercaseCh;
}

字符比较

#include<iostream>
#include<cstring>
using namespace std;
//若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数
int main(){
    char str1[20]="123421";
    char str2[20]="32432";
    cout << strcmp(str1,str2);

    return 0;
}

char*、char[]转换为string

参考资料

https://blog.csdn.net/liitdar/article/details/80498634

字符串 String 类

string是C++标准库的重要部分,主要用于字符串处理。使用string库需要在同文件中包括该库 #include<string>

1.声明和初始化

多种初始的方式
#include<string>
字符串是双引号  string  s="";
    
string s1;          //默认初始化
string s2(s1);       //s2是s1的副本
string s2 = s1;          //等价于s2(s1),s2是s1的副本
string s3("value");    //s3是字面值"value"的副本,除了字面值最后的那个空字符外
string s3 = "value";   //等价于s3("value"),s3是字面值"value"的副本
string s4(n,'c');     //把s4初始化为由连续n个字符'c'组成的串

string str1;               //生成空字符串
string str2("123456789");  //生成"1234456789"的复制品
string str3("12345", 0, 3);//结果为"123"
string str4("012345", 5);  //结果为"01234"
string str5(5, '1');       //结果为"11111"
string str6(str2, 2);      //结果为"3456789"


2.string的大小和容量

#include<string>

str.size()和 str.length();  //返回string对象的字符个数,他们执行效果相同。

str.max_size();            //返回string对象最多包含的字符数,超出会抛出length_error异常
str.capacity();            //重新分配内存之前,string对象能包含的最大字符数

str.front()           // 返回 第一个
str.back()             // 返回 最后一个

3.拼接append()&+操作符

用于拼接两个 字符串 string 类型的数据

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

int main(int argc, char const *argv[])
{
    // string str = "value";

    // cout << str.size() << "," << str.length() << endl;
    // cout << str.max_size() << endl;
    // cout << str.capacity() << endl;
    // cout << str.front() << endl;
    // cout << str.back() << endl;

    // 方法一:append()
    string s1("qwertyuiop");
    s1.append("1234567890");
    cout << "s1:" << s1 << endl; // s1:abcdef
    // 方法二:+ 操作符
    string s2 = "qwertyuiop";
    string s3 = "1234567890";
    s2 += s3.c_str();
    cout << "s2:" << s2 << endl; // s2:abcdef
}

//执行结果
s1:qwertyuiop1234567890
s2:qwertyuiop1234567890
用+来拼接字符串时,运算符的两边可以都是 string 字符串,也可以是一个 string 字符串和一个C风格的字符串,
还可以是一个 string 字符串和一个字符数组,或者是一个 string 字符串和一个单独的字符。
#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s1 = "first ";
    string s2 = "second ";
    const char *s3 = "third ";
    char s4[] = "fourth ";
    char ch = '@';
    string s5 = s1 + s2;
    string s6 = s1 + s3;
    string s7 = s1 + s4;
    string s8 = s1 + ch;

    cout << s5 << endl
         << s6 << endl
         << s7 << endl
         << s8 << endl;
    return 0;
}

first second 
first third
first fourth
first @

4.插入push_back()&insert()

insert() 函数可以在 string 字符串中指定的位置插入另一个字符串,它的一种原型为:
string& insert (size_t pos, const string& str);
#include <string>
#include <iostream>
using namespace std;

void test_push_back()
{

    string s1 = "12345";
    // 尾插一个字符
    s1.push_back('q');
    s1.push_back('w');
    s1.push_back('e');
    cout << "s1:" << s1 << endl; // s1:abc

    // insert(pos,char):在制定的位置pos前插入字符char
    s1.insert(s1.begin(), '-');
    // s1.insert(12, 1, '2');          // 插入index 越界 报错

    s1.insert(s1.end(), '0');           // 成功
    // s1.insert(5, '0');                // 报错

    s1.insert(5, "zxc");         // 成功
    cout << "s1:" << s1 << endl; // s1:1abc
}

int main(int argc, char const *argv[])
{

    test_push_back();
}

// 执行结果
s1:12345qwe
s1:-1234zxc5qwe0

5.string字符串遍历

下标法

迭代器方法

// 下标方法 
for( int i = 0; i < s1.size() ; i++ )
    {
        cout<<s1[i];
    }


//正向迭代法
    // 方法二:正向迭代器

string::iterator iter = s1.begin();
for( ; iter < s1.end() ; iter++)
    {
        cout<<*iter;
    }
cout<<endl;


// 反向 迭代 
for(int i=s1.size()-1;i>=0;i--){
    cout<< s1[i]<< endl;
}


string::reverse_iterator riter = s1.rbegin();
for( ; riter < s1.rend() ; riter++)
    {
        co ut<<*riter;
    }
cout<<endl;
}


6.string 删除erase()

  s1.erase(1,6);       // 删除 (起始位置,个数)

7.string 查找与替换

替换 str.replace()

 s1.replace(6,5,"girl");      // 起始位置,需要替换的长度,替换的字符串
 s1.replace(6,5,2,'.');      // 起始位置,需要替换的长度, 字符的数量,替换的字符

查找 str.find()

string s("dog bird chicken bird cat");

//字符串查找-----找到后返回首字母在字符串中的下标

// 1. 查找一个字符串
cout << s.find("chicken") << endl;        // 结果是:9

// 2. 从下标为6开始找字符'i',返回找到的第一个i的下标
cout << s.find('i',6) << endl;            // 结果是:11

// 3. 从字符串的末尾开始查找字符串,返回的还是首字母在字符串中的下标
cout << s.rfind("chicken") << endl;       // 结果是:9

// 只要含有任意包含中的字符都算, bird中含有i,则输出
cout<< s.find_first_of("chick")<< endl;   //输出结果是5
cout << s.find_first_not_of("dog bird 2006") << endl;  // 结果是:9

7.排序字符串

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

void test9()
{
    string s = "cdefba";
    sort(s.begin(),s.end());
    cout<<"s:"<<s<<endl;     // 结果:abcdef
    
}

8.分割字符串

strtok():分割字符串

string str="12345678"
string s1= str.substr(2,4);  //从第二个开始,个数是4个
s1="3456"

string s2=str.substr(3)     //从第三个开始以后 
s2="45678"

9.交换连个string字符串对象

stirng str1("west"),str2("east");
str1.swap(str2)
// 输出 str1=="east", str2=="west";

参考资料

https://blog.csdn.net/qq_37941471/article/details/82107077

标签:字符,String,s1,C++,char,字符串,include,string
From: https://www.cnblogs.com/tian777/p/17785709.html

相关文章

  • C++指针基础
    指针基础目录指针基础引用定义和访问案例内存空间空指针和野指针const修饰指针指针之间的赋值通过指针改变原数据值指针和数组案例1案例2说明指针和函数动态内存指针潜在危险产生的原因:危害规避参考资料引用引用变量是对现有变量的引用,它是使用&运算符创建的:stringfood="......
  • 【每天例题】蓝桥杯 c++ 卡片
    卡片题目小蓝有k种卡片,—个班有n位同学,小蓝给每位同学发了两张卡片,—位同学的两张卡片可能是同一种,也可能是不同种,两张卡片没有顺序。没有两位同学的卡片都是一样的。小蓝有k种卡片,-个班有n位同学,小蓝给每位同学发了两张卡片,-位同学的两张卡片可能是同一种,也可能是不同种,......
  • 【每日例题】蓝桥杯 c++ 奇数倍数
    奇数倍数题目本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。请你找到最小的整数X同时满足:1.X是2019的整倍数;2.X的每—位数字都是奇数。运行限制·最大运行时间:1s·最大运行内存:128M蓝桥杯奇数倍数题目分析针对这个题目,要判断两个条件:1.这个数......
  • The ConnectionString property has not been initialized.
     原因:情况1DbContext中没有指定连接字符串解决: 情况2appsettings.json配置文件的属性没有设置为始终复制 ......
  • CodeForces 946F Fibonacci String Subsequences
    洛谷传送门CF传送门duel的时候差点不会2400了。套路地,考虑每个\(F(x)\)中与\(s\)相同的子序列的贡献。设这个子序列为\(F(x)_{p_1},F(x)_{p_2},F(x)_{p_3},\ldots,F(x)_{p_n}\)。我们想要它成为一个子序列的子串,那么\(F(x)_{[p_1,p_n]}\)中除了\(p_1\simp_......
  • C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例
    相关源码测试用例下载包括4个压缩包,初始代码,实现前缀和,实现前缀积,实现前缀异或。都是在前者的基础上修改的。原理长度为n的数组nums,共有n+1个以nums[0]开始的子数组。索引范围分别为[0,i),i取值区间[0,n]。preSum[i]记录子数组[0,i)的和。比如:nums={1,2,3,4},则preSum={0,1,3,6......
  • C++前缀和算法应用:和至少为 K 的最短子数组的原理、源码及测试用例
    题目给你一个整数数组nums和一个整数k,找出nums中和至少为k的最短非空子数组,并返回该子数组的长度。如果不存在这样的子数组,返回-1。子数组是数组中连续的一部分。示例1:输入:nums=[1],k=1输出:1示例2:输入:nums=[1,2],k=4输出:-1示例3:输入:nums=......
  • C++前缀和算法:构造乘积矩阵
    题目给你一个下标从0开始、大小为n*m的二维整数矩阵grid,定义一个下标从0开始、大小为n*m的的二维矩阵p。如果满足以下条件,则称p为grid的乘积矩阵:对于每个元素p[i][j],它的值等于除了grid[i][j]外所有元素的乘积。乘积对12345取余数。返回grid的乘积......
  • C++算法:二叉树的序列化与反序列化
    #题目序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列/反序列化算法执行逻......
  • C++算法前缀和的应用:得分最高的最小轮调的原理、源码及测试用例
    题目给你一个数组nums,我们可以将它按一个非负整数k进行轮调,这样可以使数组变为[nums[k],nums[k+1],…nums[nums.length-1],nums[0],nums[1],…,nums[k-1]]的形式。此后,任何值小于或等于其索引的项都可以记作一分。例如,数组为nums=[2,4,1,3,0],我们按k=2进行......