C++ 字符串操作

简介: 文章目录1.1 C++ 字符串操作2.2字符数组的常用操作2.3遍历字符数组的字符3.标准库类型string3.1 定义和初始化3.2 string的操作1)读写操作2)使用`getline`读取一整行3)string的方法操作4)字符串和string相加3.3处理string对象中的字符

1.1 C++ 字符串操作

2.2字符数组的常用操作

下面几个函数需要额外引入头文件:


#include <string.h>
  1. strlen(str),求字符串的长度
  2. strcmp(a, b),比较两个字符串的大小,a < b返回-1,a == b返回0,a > b返回1。这里的比较方式是字典序!
  3. strcpy(a, b),将字符串b复制给从a开始的字符数组。
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
    char a[100] = "hello world!", b[100];
    cout << strlen(a) << endl;
    strcpy(b, a);
    cout << strcmp(a, b) << endl;
    return 0;
}

2.3遍历字符数组的字符

#include <iostream>
#include <string.h>
using namespace std;
int main()
{
  char a[100] = "what fk";
  int len = strlen(a);
  for (int i = 0; i < len; i++)
    cout << a[i] << endl;
  return 0;
}

3.标准库类型string

<string> 是C++标准库头文件,包含了拟容器class std::string的声明


另外补充:


1.<cstring>是C标准库头文件<string.h>的C++标准库版本, 包含了C风格字符串(NUL即’\0’结尾字符串)相关的一些类型和函数的声明,例如strcmp、strchr、strstr等。


2.<castring>和<string.h>的最大区别在于,其中声明的名称都是位于std命名空间中的,而不是后者的全局命名空间。


3.1 定义和初始化

#include <iostream>
#include <string>
using namespace std;
int main()
{
  string a ;
  string b = a;
  if(a == b) cout << "stan";
  return 0;
}

3.2 string的操作

1)读写操作

注意:不能用printf直接输出string,

需要写成:printf(“%s”, s.c_str());

#include <iostream>
#include <string>
using namespace std;
int main()
{
  string s1 , s2;
  cin >> s1 >> s2;
  cout << s1 << s2 << endl;
  printf("%s", s1.c_str());
  return 0;
}

2)使用getline读取一整行

#include <iostream>
#include <string>
using namespace std;
int main()
{
  string s1;
  getline(cin, s1);
  cout << s << endl;
  return 0;
}

3)string的方法操作

size的使用,得到字符长度

⚠注意size是无符号整数,因此 s.size() <= -1一定成立

#include <iostream>
#include <string>
using namespace std;
int main()
{
  string s1 = "abcde";
  int len = s1.size();
  cout << len << endl;
  return 0;
}

4)字符串和string相加

#include <iostream>
#include <string>
using namespace std;
int main()
{
  string s1 = "abcde";
  string s2 = s1 + "efg";
  string s3 = "efg" + s1;
    //会报错:gument domain error (DOMAIN)
  // string s4 = "efg" + 123;
    //表达式必须具有整数或未区分范围的枚举类型
  // string s5 = "asdf" +"asd"
  cout << s2 << endl;
  cout << s3 << endl;
  cout << s4 << endl;
  return 0;
}

🚩也就是说每个加法运算的两侧必须至少有一个string

3.3处理string对象中的字符

可以将string对象当成字符数组来处理:

#include <iostream>
#include <string>
using namespace std;
int main()
{
  string s1 = "one";
  for(int i= 0;i <s1.size();i++)
    cout << s1[i];
  return 0;
}
相关文章
|
1月前
|
存储 算法 编译器
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
47 1
|
1月前
|
对象存储 C++
在C++语言中字符串流
在C++语言中字符串流
17 2
|
1月前
|
并行计算 Go C++
2182.构造限制重复的字符串(模拟 贪心 优先队列 C++ Go)
【2月更文挑战第19天】2182.构造限制重复的字符串(模拟 贪心 优先队列 C++ Go)
23 1
|
1月前
|
Go C++
【力扣】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
【2月更文挑战第18天】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
34 6
|
2月前
|
人工智能 算法 测试技术
【动态规划】【字符串】【C++算法】940. 不同的子序列 II
【动态规划】【字符串】【C++算法】940. 不同的子序列 II
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
9天前
|
安全 C++
石头剪子布(字符串解法 C++)
石头剪子布(字符串解法 C++)
17 0
|
1月前
|
安全 Unix Linux
【C/C++ 字符串】探索C语言之字符串分割函数:strtok和strsep的区别
【C/C++ 字符串】探索C语言之字符串分割函数:strtok和strsep的区别
15 0
|
1月前
|
存储 Shell C语言
【C/C++ 字符串与整型转换函数】探索C语言中的字符串和整型之间的转换函数
【C/C++ 字符串与整型转换函数】探索C语言中的字符串和整型之间的转换函数
15 0
|
1月前
|
C++ 索引
C++系列十五:字符串
C++系列十五:字符串