C++ 字符串的概念

简介: C++ 字符串的概念

什么是字符串

字符串就是0个或多个“字符”组成的“有序”序列。

字符串长度


字符串包含的字符个数(不是指中文)。


空字符串的长度是0


“”是空字符串常量,没有一个字符,长度是0


“ ”是空格字符串常量,包含1个空格,长度是1


“god”  的字符串长度是 3


“我爱你” 的字符串长度不是3 ,是6或9


(在某些编码中,一个汉字占用2个直接,有些编码中占3个字节)


“” 的字符串长度是0(空串)


“ ” 的字符串长度是1(含有一个空格)


字符串常量

“字面型”字符串常量,要求用“”扩起来。

printf("name=%s", "C++");  //C语言方式输出字符串,%s用来匹配字符串

cout << “C++”;   //C++方式输出字符串



字符串结束符

c语言中,为了便于存储字符串,要求在最后一个字符的后面存储一个0(一个字节)。

这个0, 称为“字符串结束符”,常用 ‘\0’ 表示。

“China”  =>   ‘C’   ‘h’   ‘i’    ‘n’   ‘a’    ‘\0’

“”       =>   ‘\0’

1d45e98d08ca453596e2f2cc62a46150.png


字符串变量的表示

在C语言中,使用char类型的数组,来存储字符串变量

注:C语言中,没有专用的字符串类型。

在C++中,使用std::string类型来表示字符串变量。


C++风格的字符串string:

string变量的定义、初始化

//定义了一个字符串变量,此时,该字符串是空字符串。
      string girlFriend1;
      girlFriend1 = "王菲";  //把字符串常量"王菲"拷贝到girlFriend1
      cout << "girlFriend1 = " << girlFriend1 << endl;
      string girlFriend2;
      girlFriend2 = girlFriend1; //把字符串变量girlFriend1的值拷贝到girlFriend2
      cout << "girlFriend2 = " << girlFriend2  << endl;
      //定义girlFriend3的同时,使用字符串常量"周迅"来初始化
      string girlFriend3("周迅");
      cout << "girlFriend3 = " << girlFriend3  << endl;
      //定义girlFriend4的同时,使用字符串变量来初始化
      string girlFriend4(girlFriend3);
      cout << "girlFriend4 = " << girlFriend4  << endl;
      string girlFriend5(10, 'A');
      cout << "girlFriend5 = " << girlFriend5  << endl;

string 变量的输入、输出


使用std::cin >> 输入

从第一个非空白字开始,直到遇到空白字符时停止输入

空白字符是指:空格,制表符,回车符

使用std::cout  <<  输出

demo1-基本的输入输出

string job;
       cout << "你是做什么工作的?" << endl;
       cin >> job;
       cout << "做" <<  job << ",收入一定不错吧?" << endl;

demo2-自动跳过空白字符

  string university;  //大学
       string profession; //专业
       cout << "你是哪个学习毕业的?学什么专业? ";
       // 输入:     清华     考古     hello
       // 自动跳过空白字符
       cin >> university >> profession;
       cout << university << "的" << profession << "专业不错哦!"  << endl;

demo3 -连续输入多个字符串,个数不确定

#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
int main(void) {
       string food; //专业
       int i = 0;
       cout <<  "你喜欢什么美食? ";
       while (cin >> food) { //当用户输入 Ctrl + z 并回车 cin >> food返回0,  0就是假
              i = i + 1;
              cout << "你喜欢的第" << i << "美食是:" << food << endl ;
              cout <<  "你还喜欢吃什么美食? ";
       }
       cout << "你最喜欢的美食有" << i << "种"  << endl;
       system("pause");
       return 0;
}

demo4 - 读取一行getline

#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
int main(void) {
       string addr; //专业
       cout << "你想到哪里去旅行:";
       //从标准输入设备读取一行,但是不包括最后输入的回车符
       getline(cin, addr);
       //empty方法
       if (addr.empty() == true) {
              cout << "您输入了一个空行" << endl;
              return 1;
       }
       //size()和length()完全等效
       //长度是指字符串占用的字节数,如果含有汉字,那么总的字节数和汉字个数不同
       cout << "地址的长度是:" << addr.size() << endl;
       cout << "地址的长度是:" << addr.length() << endl;
       system("pause");
       return 0;
}

string字符串的比较



比较规则:和C语言相同。


从字符串的第一个字符开始,对应字符逐个比较,直到遇到不相等的字符为止。


比较运算符有:


>   >=   <    <=   ==  


比较运算的结果:逻辑真,  逻辑假


“123”  <  “1230”          真


“19”   >   “123456789”     真


“2”  >   “1999”           真


“123”  ==  “123”            真


“123”  ==  “1230”           假  

#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
int main(void) {
      string myGirl = "小芳";
      string yourGirl;
      cout << "我喜欢的女孩子是" << myGirl << endl;
      cout << "你喜欢的女孩是:";
      cin >> yourGirl;
      if (myGirl == yourGirl) {
            cout << "我们喜欢同一人,过来决斗吧" << endl;
      } else {
            cout << "祝你幸福";
      }
      system("pause");
      return 0;
}

注意:c语言的字符串,不能使用这个方式来进行字符串比较。

string字符串的加法


把+左侧的字符串,和+右侧的字符串,直接拼接成一个新的字符串

注意顺序。(C语言的字符串不支持该方式)

注意与数学中的“加法”不同:

“100” + “200”  等于 “300”

“100” + “200” 等于 “100200”


#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
int main(void) {
       string s1 = "武当派";
       string s2 = "张三丰";
       string s3 = "太极拳";
       string s4;
       s4 = s1 + s2;  //武当派张三丰
       cout << "s4=" << s4 << endl;
       s4 = s4 + s3;  //武当派张三丰太极拳
       //相当于 s4 += s3;
       cout << "s4=" << s4 << endl;
       s4 += "第一式";  
       //等效于:s4 = s4 + "第一式";
       cout << "s4=" << s4 << endl;
       system("pause");
       return 0;
}

C语言风格的字符串char数组

在c语言中,字符串是以“字符数组”存储的。

#include <iostream>
#include <Windows.h>
#include <stdio.h>
using namespace std;
int main(void) {
          //C语言风格的字符串
         char name[32];
         /*
         使用C语言的函数,来处理C语言字符串
         printf("请输入您的名字:");
         scanf("%s", name);       
         printf("%s, 你好!\n", name);  
         */
         // 使用C++的方式,来处理C语言字符串
         cout << "请输入您的名字:";
         cin >> name;
         cout << name << ",你好!" << endl;
         system("pause");
         return 0;
}


相关文章
|
4月前
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
106 4
|
3月前
|
缓存 网络协议 API
C/C++ StringToAddress(字符串转 boost::asio::ip::address)
通过上述步骤和示例代码,你可以轻松地在C++项目中实现从字符串到 `boost::asio::ip::address`的转换,从而充分利用Boost.Asio库进行网络编程。
99 0
|
3月前
|
编译器 C语言 C++
C/C++数字与字符串互相转换
C/C++数字与字符串互相转换
|
3月前
|
程序员 C++ 开发者
C++入门教程:掌握函数重载、引用与内联函数的概念
通过上述介绍和实例,我们可以看到,函数重载提供了多态性;引用提高了函数调用的效率和便捷性;内联函数则在保证代码清晰的同时,提高了程序的运行效率。掌握这些概念,对于初学者来说是非常重要的,它们是提升C++编程技能的基石。
31 0
|
4月前
|
C++
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
|
4月前
|
存储 C++
C++(五)String 字符串类
本文档详细介绍了C++中的`string`类,包括定义、初始化、字符串比较及数值与字符串之间的转换方法。`string`类简化了字符串处理,提供了丰富的功能如字符串查找、比较、拼接和替换等。文档通过示例代码展示了如何使用这些功能,并介绍了如何将数值转换为字符串以及反之亦然的方法。此外,还展示了如何使用`string`数组存储和遍历多个字符串。
|
6月前
|
JSON Go C++
开发与运维C++问题之在iLogtail新架构中在C++主程序中新增插件的概念如何解决
开发与运维C++问题之在iLogtail新架构中在C++主程序中新增插件的概念如何解决
55 1
|
6月前
|
算法 C++
2730. 找到最长的半重复子字符串(c++,滑动窗口)
2730. 找到最长的半重复子字符串(c++,滑动窗口)
|
6月前
|
C++
567. 字符串的排列(c++)滑动窗口
567. 字符串的排列(c++)滑动窗口
|
6月前
|
C++ 开发者
C++一分钟之-概念(concepts):C++20的类型约束
【7月更文挑战第4天】C++20引入了Concepts,提升模板编程的类型约束和可读性。概念定义了模板参数需遵循的规则。常见问题包括过度约束、约束不完整和重载决议复杂性。避免问题的关键在于适度约束、全面覆盖约束条件和理解重载决议。示例展示了如何用Concepts限制模板函数接受的类型。概念将增强模板的安全性和灵活性,但需谨慎使用以防止错误。随着C++的发展,Concepts将成为必备工具。
117 2