C++中的字符和字符串

C++字符操作教程 在 C++ 中,字符数组是一种特殊的数组类型,用于存储一串字符。字符数组在程序中广泛应用,例如存储字符串、输入输出字符串、处理字符串等,需要头文件。定义一个字符数组的基本语法如下:// 可以指定长度也可以不指定长度在上述示例中,定义了一个名为str的字符数组,用于存储字符串 "hello world"。由于字符数组的长度是不确定的,因此可以省略数组长度。可以使用下标运算符[]访问字符数组中的元素。例如:// 将字符数组的第一个字符赋值给变量 ch。 阅读详情

一:引言

1、错误分析

请先看一下以下代码

#include <iostream>
#include <utility> // 包含pair和make_pair的定义

int main() {
    // 创建pair对象
    std::pair<int, std::string> p1(1, "one");

    // 使用make_pair创建pair对象
    auto p2 = std::make_pair(2, "two");
    //make_pair 通过参数 x 和 y 的类型来自动推导出 pair 中的 first 和 second 的类型。
    // 访问pair的成员
    std::cout << "p1: (" << p1.first << ", " << p1.second << ")\n";
    std::cout << "p2: (" << p2.first << ", " << p2.second << ")\n";

    // 比较pair对象
//pair 支持比较操作,按照词典顺序比较,即先比较 first,如果相等则比较 second。
    if (p1 < p2) {
        std::cout << "p1 is less than p2\n";
    } else {
        std::cout << "p1 is not less than p2\n";
    }
    return 0;
}

 以上代码 创建pair对象,并且比较pair对象看似没啥错误,实际上(p1<p2)处出现了一下错误

 [Error] no match for 'operator<' (operand types are 'std::pair<int, std::__cxx11::basic_string<char> >' and 'std::pair<int, const char*>')

这个错误信息表明,在尝试比较两个 pair 对象时,类型不匹配,导致编译器无法使用 < 运算符进行比较。具体来说,问题在于两个 pair 的 second 元素类型不相同,一个是 std::string 类型 (std::__cxx11::basic_string<char>) ,另一个是 const char* 类型。这种不匹配会导致 operator< 无法直接应用。

在 auto p1 = std::make_pair(2, "two"); 这行代码中,make_pair 根据传入的参数 2 和 "two" 推导出 pair<int, const char*> 类型。相当于手动定义:std::pair<int, const char*> p2(2, "two");

 这个错误的解决方案

1、使用string的构造函数匿名对象,使得 make_pair 使用 std::string 类型

auto p2 = std::make_pair(2, std::string("two"));

2、使用 const char* 一致类型

std::pair<int, const char*> p1(1, "one");

2、小结

  • pair 的元素类型必须一致才能进行比较操作。
  • std::string 和 const char* 是不同的类型,尽管它们可以通过转换进行交互,但不能直接比较。
  • 确保 pair 中的类型一致,可以避免类型不匹配的编译错误。

二: 字符与字符串

在 C++ 中,字符和字符串是用于处理文本的基本数据类型和数据结构。它们在编程中非常常见,用于存储和操作文本数据。以下是对 C++ 中字符和字符串的详细讲解,包括字符、C 风格字符串(C-strings)和 C++ 标准库中的 std::string。

1. 字符(char)

char 类型

  • char 是 C++ 中最基本的字符数据类型,用于表示单个字符。
  • 占用 1 字节(8 位),可以存储 ASCII 码值(0 到 127)以及扩展字符集(0 到 255)。
  • 常用于处理单个字符,如字母、数字或符号。
#include <iostream>

int main() {
    char ch = 'A'; // 定义一个字符变量,'A' 是字符常量,必须用单引号括起来
    std::cout << "Character: " << ch << std::endl;
    std::cout << "ASCII Value: " << static_cast<int>(ch) << std::endl; 
// 转换为整数类型,char 类型的变量可以通过 static_cast<int>(ch) 转换为对应的 ASCII 整数值。
    return 0;
}

2. C 风格字符串(C-Strings)

C 风格字符串定义

  • C 风格字符串是一个以 \0(空字符)结尾的字符数组。字符串必须以 \0 结尾,这标识字符串结束,否则操作字符串时可能导致未定义行为。
  • 它是 C 语言遗留下来的字符串处理方式,在 C++ 中也可用。
  • 常见的字符数组操作有:定义、初始化、输入输出、字符串函数(如 strlen、strcpy 等)。

C 风格字符串常用函数

  • strlen():返回字符串的长度。
  • strcpy():复制字符串。
  • strcat():拼接两个字符串。
  • strcmp():比较两个字符串。
#include <iostream>
#include <cstring>// 包含C风格字符串操作函数

int main() {
    // 声明和初始化
    char str1[] = "Hello";// 自动推导为 char str1[6]
    char str2[20] = "World";// 数组大小为 20, 但只用掉了前6个位置, 其余元素初始化为 \0。

    // 字符串长度
    std::cout << "str1长度: " << strlen(str1) << std::endl;

    // 字符串复制
    char str3[20];
    strcpy(str3, str1);
    std::cout << "str3: " << str3 << std::endl;

    // 字符串连接
    strcat(str3, " ");
    strcat(str3, str2);
    std::cout << "连接后的str3: " << str3 << std::endl;

    // 字符串比较
    if (strcmp(str1, str2) == 0) {
        std::cout << "str1 和 str2 相等" << std::endl;
    } else {
        std::cout << "str1 和 str2 不相等" << std::endl;
    }

    return 0;
}
str1长度: 5
str3: Hello
连接后的str3: Hello World
str1 和 str2 不相等

指定大小不初始化:  如果明确指定数组大小,大小必须足够大以容纳字符串及终止符 \0。

未定义的字符数组:未初始化的字符数组包含随机值,使用前必须手动赋值并添加终止符。

#include <iostream>

int main() {
    char str[10];              // 大小为 10 的字符数组,内容未定义 
//如果你只指定大小但不进行初始化,数组中的内容将是未定义的随机数据(垃圾值)。
    // str 的内容未定义,不能安全输出
    str[0] = 'C';              // 手动设置字符
    str[1] = '+';
    str[2] = '+';
    str[3] = '\0';             // 添加终止符,表示字符串结束

    std::cout << "str: " << str << std::endl;// 输出 str: C++
    return 0;
}

3. C++ 字符串(std::string)

std::string 类型

  • std::string 是 C++ 标准库提供的字符串类,定义在 <string> 头文件中。
  • 提供了对字符串的更高层次的抽象,支持动态管理字符数组的大小。
  • 支持丰富的操作符和成员函数,如拼接、查找、替换、插入等。

常用成员函数

  • size() 或 length():获取字符串长度。
  • append():在字符串末尾追加内容。
  • substr():返回子字符串。
  • find():查找字符或子字符串。
  • replace():替换字符串中的部分内容。
  • insert():插入内容到指定位置。
  • erase():删除指定位置的字符或子串。
#include <iostream>
#include <string>

int main() {
    // 声明和初始化
    std::string s1 = "Hello";
    std::string s2("World");
    std::string s3(5, 'A');  // 创建包含5个'A'的字符串

    // 字符串连接
    std::string s4 = s1 + " " + s2;
    std::cout << "s4: " << s4 << std::endl;

    // 获取长度
    std::cout << "s4长度: " << s4.length() << std::endl;

    // 访问单个字符
    std::cout << "s4的第一个字符: " << s4[0] << std::endl;

    // 子字符串
    std::cout << "s4的子串: " << s4.substr(0, 5) << std::endl;

    // 查找
    size_t pos = s4.find("World");
    if (pos != std::string::npos) {
        std::cout << "找到 'World' 在位置: " << pos << std::endl;
    }

    // 替换
    s4.replace(0, 5, "Hi");
    std::cout << "替换后的s4: " << s4 << std::endl;

    // 插入
    s4.insert(2, " there");
    std::cout << "插入后的s4: " << s4 << std::endl;
	
	// 删除
	s4.erase(8,6);
	std::cout << "删除后的s4: "<< s4 << std::endl; 
    return 0;
}
s4: Hello World
s4长度: 11
s4的第一个字符: H
s4的子串: Hello
找到 'World' 在位置: 6
替换后的s4: Hi World
插入后的s4: Hi there World
删除后的s4: Hi there

三:深入探讨

1.字符数组的错误使用分析

在 C++ 中,当定义一个字符数组(C 风格字符串)时,如 char str[] = "helle";,字符数组会被初始化为包含特定字符的数组,数组的大小是根据初始化字符串的长度自动决定的(包括终止字符 \0)。但字符数组的名字 str 是一个不可修改的指针常量,指向这个数组的第一个元素。直接将数组 str4 赋值为另一个字符串是非法的,因为 C++ 不允许对数组名进行重新赋值。

char str[] = "hello";  // 声明并初始化字符数组
str = "world";         // 错误!无法将新字符串赋值给字符数组

1. char str[] = "hello";

  • 这行代码定义了一个字符数组 str,并用字符串 "hello" 对其进行初始化。
  • 编译器会自动为这个数组分配足够的空间,大小为 6 个字节('h', 'e', 'l', 'l', 'e', '\0')。
  • 数组 str 的类型是 char[6],它是一个固定大小的数组,数组的名字 str 是一个不可修改的指针常量,即不能让它指向新的地址。

2. str = "world";

  • 这行代码试图将 str 指向新的字符串 "world",这是错误的。
  • 原因是数组名 str 是一个指向数组首元素的指针常量,不能被修改为指向其他内存位置。它在初始化时已经绑定到分配的内存地址,无法通过赋值操作改变。

合法的字符串修改方法

要修改 str 中的内容,可以使用字符串函数(如 strcpy),或者逐个修改字符。以下是几种正确的方法:

 方法 1:使用 strcpy 函数
#include <iostream>
#include <cstring> // 包含strcpy函数

int main() {
    char str[] = "hello";  // 声明并初始化字符数组

    // 使用strcpy复制新字符串到数组中
    std::strcpy(str, "world");

    std::cout << "str: " << str << std::endl;  // 输出修改后的字符串
    return 0;
}
  • strcpy 函数从源字符串 "world" 复制字符到 str 所指向的内存空间。
  • 确保目标数组足够大以容纳新字符串及其结束符,否则会导致未定义行为(如内存越界)。
 方法 2:手动逐个修改字符
#include <iostream>

int main() {
    char str[] = "hello";  // 声明并初始化字符数组

    // 手动修改每个字符
    str[0] = 'w';
    str[1] = 'o';
    str[2] = 'r';
    str[3] = 'l';
    str[4] = 'd';
    str[5] = '\0'; // 添加字符串结束符

    std::cout << "str: " << str << std::endl;  // 输出修改后的字符串
    return 0;
}

2. 不同字符串操作方式

const char* str

  • 定义:C风格字符串,本质上是指向字符数组第一个元素的常量指针。const 修饰的是指针指向的内容,而不是指针本身。可以改变指针 str 的指向,让它指向新的字符串字面量。
  • 特点: a. 固定大小:一旦定义就不能改变其内容(因为是const)。 b. 以空字符('\0')结尾。 c. 使用C标准库函数进行操作,如 strlen(), strcpy(), strcat() 等。
const char* str = "hello";
str = "world"; // 允许更改指向,但不能修改字符串内容

char str[] 和 const char* str 的区别

  • 内存分配:
    • char str[]:在栈上分配内存。数组的大小在编译时确定,不能改变。
    • const char* str:只分配指针本身的内存(通常是4或8字节)。字符串内容通常存储在只读数据段。
  • 可变性:
    • char str[]:数组内容可以修改。例如,str[0] = 'H'; 是合法的。
    • const char* str:指向的内容不能修改(因为是const)。尝试修改会导致编译错误或运行时错误。
  • 指针操作:
    • char str[]:数组名会退化为指向数组首元素的指针,但不能重新赋值。
    • const char* str:可以重新赋值为指向其他字符串。
  • 大小信息:
    • char str[]:使用 sizeof(str) 可以得到数组的总大小(包括结尾的空字符)。
    • const char* str:sizeof(str) 只会返回指针的大小,而不是字符串的长度。
  • 初始化:
    • char str[] = "Hello";:编译器会分配6个字节的内存(5个字符加1个空字符)。char str[]必须在声明时指定大小或初始化。
    • const char* str = "Hello";:str指向一个字符串字面量,通常存储在只读内存中。const char* str可以只声明了指针,不需要立即初始化,但使用前必须指向有效的地址。
#include <iostream>
#include <cstring>

int main() {
   
    char str1[] = "Hello";// 正确的数组声明和初始化
    std::cout << "str1: " << str1 << std::endl;
    std::cout << "Size of str1: " << sizeof(str1) << std::endl;
    
    str1[0] = 'h';// 允许修改 char 数组内容
    std::cout << "Modified str1: " << str1 << std::endl;

    const char* str2 = "World";// 正确的指针声明和初始化 str2指向字符串字面量
    std::cout << "str2: " << str2 << std::endl;
    std::cout << "Size of str2: " << sizeof(str2) << std::endl;//(通常是4或8字节)

    // 不能修改 const char* 指向的内容
    // str2[0] = 'w';  // 这行会导致编译错误,指向的内容是常量

   
    str2 = "New World"; // 但可以改变指针指向的地址
    std::cout << "New str2: " << str2 << std::endl;

    // char 数组的指针算术
    for (int i = 0; i < 5; ++i) {
        std::cout << "str1[" << i << "]: " << str1[i] << ' ';
    }
	std::cout<<std::endl;
    // const char* 的指针算术
    for (int i = 0; i < 5; ++i) {
        std::cout << "str2[" << i << "]: " << str2[i] << ' ';
    }

    return 0;
}

 输出结果

str1: Hello
Size of str1: 6
Modified str1: hello
str2: World
Size of str2: 8
New str2: New World
str1[0]: h str1[1]: e str1[2]: l str1[3]: l str1[4]: o
str2[0]: N str2[1]: e str2[2]: w str2[3]:   str2[4]: W

小结

  • char str1[] 是一个字符数组,存储实际的数据,可以修改内容,但大小在定义时固定。
  • const char* str2 是一个指针,指向字符串字面量或其他字符数组,指针可以修改其指向的位置,但不能修改其指向的数据内容。
  • 两者在内存管理、使用方式和修改权限上都有显著不同,不可混淆使用。

四:总结:

本文深入探讨了C++中字符和字符串的处理方法,涵盖了从基本的char类型到复杂的std::string类。我们详细讲解了以下几个关键点:

  1. 字符(char)类型的基本使用和ASCII值转换。
  2. C风格字符串(C-Strings)的定义、初始化和常用操作函数,如strlen、strcpy等。
  3. C++标准库中std::string类的优势和丰富的成员函数。
  4. char数组和const char*指针的深度比较,包括它们在内存分配、可变性、指针操作等方面的区别。

通过本文的学习,我们可以得出以下结论:

  • 在现代C++编程中,除非有特殊需求,否则通常推荐使用std::string来处理字符串。它提供了更安全、更灵活的字符串处理方式。
  • 理解C风格字符串的工作原理对于处理遗留代码和底层操作仍然重要。
  • 正确区分和使用char数组和const char*指针可以帮助我们更好地管理内存和提高代码的安全性。
  • 在使用字符串时,始终注意类型匹配,特别是在使用std::pair等模板类时。

 

c++中的char类型和字符串的运算 在C++中,char类型实际上是一种,只不过它通常用于表示。char类型的变量在内存中存储的是字符对应的ASCII值,例如,以此类推。当我们char。例如,如果有一个char变量k,其值为’1’,当执行k++时,k的ASCII值会增加1,变成50,对应的字符就是’2’。 阅读详情

相关推荐

C/C++中的字符和字符串输入

毫无疑问,大家在c中都采用scanf来输入,在c++中采用cin输入,那么这两个到底有什么不同之处呢,以及如何在适当的时候选择合适的方法读入字符和字符串呢。 鉴于在VS中一些函数如scanf无法使用,改为更安全的scanf_s,所以本文的代码只在dev C++ 中运行。 一、字符串知识 首先我们来讲一下字符和字符串的基本知识。 在C语言中单个字符用char来定义,如果要定义字符串的话就...

frange zone 2150

C/C++中比较字符串的方法

C/C++中比较字符串的方法,strcmp,compare,==,strstr四种方法

qq_44631587的博客 3万+

C++(11):pair/make_pair

通过pair的显示构造有的时候稍显得有些麻烦,可以通过make_pair进行简化。

风静如云的博客 1713

c++字符、字符串详解

字符的ASCCI码是0至127的整数,字符与整数比较的规则是把字符的ASCCI码和整数进行大小比较,例如:'a'127的结果是假,而97

浪子回头 7963

比较两个字符串的方法(C++)

std::string类还提供了一个compare函数,用于比较两个字符串。如果返回值小于0,则表示调用compare函数的字符串小于参数字符串;如果返回值大于0,则表示调用compare函数的字符串大于参数字符串。如果返回值小于0,则表示第一个字符串小于第二个字符串;如果返回值大于0,则表示第一个字符串大于第二个字符串。在C++中,std::string类提供了比较操作符来判断两个字符串是否相等或者大小关系。可以使用"==“运算符来判断两个字符串是否相等,使用”"运算符来比较大小。

PkbgRuby的博客 2706

Apple CarPlay Certification Guide December 2022 解析V1.0

Apple CarPlay Certification Guide December 2022更新说明

m0_74450450的博客 703

用C++统计字符串中的数字、字符和特殊字符的个数

例2:用C++程序,统计一个字符串中的数字、字符和特殊字符的个数 代码如下: //分别统计一个字符串中的数字、字母和特殊字符的个数 #include #include #define MAX 1024 using namespace std; //统计函数 void cal_num(char* str,int count[]) { char *pstr; pstr=str; whil

sanqima的专栏 2万+

别再被坑了!手把手教你从官网下载免费正版Notepad++(附最新网盘链接)

本文详细指导如何从Notepad++官网安全下载正版软件,避免山寨版本带来的安全风险。通过识别官网特征、推荐官方下载渠道、揭露山寨网站骗局及验证正版功能,帮助用户高效获取纯净的Notepad++代码编辑器,并分享实用插件和配置优化技巧。

weixin_42527654的博客 562

C++中的字符和字符串2

string字符串类中常见函数及其运用

2501_90693155的博客 652

Linux运维踩坑实录:手把手教你修复LVM中PV显示[unknown]的诡异问题

本文详细解析了Linux运维中LVM物理卷(PV)显示[unknown]的故障现象及修复方法。通过分析问题根源、提供标准修复流程和特殊场景处理方案,帮助运维人员快速解决VG容量异常、PV状态丢失等问题,并分享预防措施与最佳实践,确保LVM存储系统的稳定运行。

weixin_26869081的博客 348

使用Eggjs做服务端获取微信小程序云开发数据库的access_token

最近自己想写了一个微信小程序,恰巧里面有个云开发,恰巧里面有个数据库,那懒人的我,就直接用云开发里面的数据库了,做测试或者正式也好,对于刚开始来说,免费的配额是够用的。 后来想到在小程序云开发上面的数据怎么看才方便?刚好微信小程序有一个服务端API,那就方便很多了,那就直接敲个服务端来获取云开发上数据库的数据出来到自己的后台上面,那以后管理起来也方便很多。 看了一下服务端api之后,发现有三个重要...

kalenE992的博客 1705

C/C++和python中的字符串

文章目录一、C语言中的字符串二、C++中的字符串三、C和C++中字符串的不同3.1 C中的字符串内存结构3.2 C++中的字符串有动态分配空间的机制四、python中的字符串 一、C语言中的字符串 C语言中使用一个以’\0’结尾的字符数组来表示一个字符串; 使用字符串相关函数需要引入库"string.h"; C和C++严格区分单引号和双引号,单引号只能用来表示单个字符。 #include "stdio.h" #include "string.h" int main() { char a[] =

weixin_39861267的博客 2346

【STM32+K210项目】基于K210智能人脸识别+车牌识别系统(完整工程资料源码)

随着时代的进步和科技的迅猛发展,人们对居住安全的重视程度不断提升,对安全防范系统的需求也日益增强。在安防系统中,门禁系统占据着重要的位置。传统的门禁控制方式主要依靠钥匙、密码和门禁卡等,这些方式易于被破解和复制,安全性较低。然而,近年来,生物识别技术的迅速发展和成熟,为解决这一问题提供了新的方案。生物识别技术具备便携性、非易失性、不易遗忘以及难以盗用等优点,逐渐被引入到门禁系统中。传统的小区门禁系统往往依赖人工管理,存在一定的局限性,难以满足用户多样化的需求,也浪费了人力资源。

嵌入式技术开发 1万+

模板字符串在JavaScript、Python和C++中的应用

在不同的编程语言中,模板字符串是一种用于处理字符串格式化的技术。在这篇博客中,我们将深入了解在和中模板字符串的应用,以及它们在不同语境下的使用方式和特点。

宁子希的博客 1187

[PCIE5.0] 4.2.3.2 Encoding of Presets

• 发射器预设:发射器预设值用4位二进制编码,表示不同的预设设置(P0 到 P10),这些设置定义了信号的传输特性。• 接收器预设提示:接收器预设提示是通过3位二进制编码告诉接收器建议的增益值,用于调整接收器的灵敏度(适用于8.0 GT/s数据速率)。

系统固件工程师 574

解锁PyCharm+Deepseek:本地部署AI编程超能力

在本次探索中,我们成功地在 PyCharm 中实现了 DeepSeek 的本地化部署,这一过程虽然涉及多个步骤,但每一步都为我们开启 AI 编程大门奠定了基础。从安装最新版 PyCharm,确保我们拥有一个功能强大且兼容性良好的开发环境,到注册 DeepSeek 账号并获取 API Key,这是连接我们与强大 AI 能力的关键纽带。接着,在 PyCharm 中安装 Continue 插件并进行精细配置,让 DeepSeek 能够深度融入我们的编程流程。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 5548

C++ 编写一个函数,把字符串中的数字字符、英文字母字符和其它字符分开。

问题描述: 编写一个函数,把字符串中的数字字符、英文字母字符和其它字符分开。如对于字符串“12a:?3byu98!”,将其分解为三个独立的字符串“12398”、“abyu”和“:?!”。 要求以指针作为函数参数,主函数输入原字符串,分解后的三个字符串在主函数打印输出 #include <iostream> #include <map> #include <string...

WGS. 4140

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++分离字符串中的数字和字符

#include &amp;amp;lt;iostream&amp;amp;gt; #include &amp;amp;lt;string&amp;amp;gt; #include &amp;amp;lt;vector&amp;amp;gt; using namespace std; void part(string _str, vector&amp;amp;lt;int&amp;amp;gt; &amp;amp;amp;_

白水的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【C++】C++中的字符串类以及C字符串和C++字符串的转换

文章目录字符串与数字的转换使用方法string-->数字数字-->string面试题 字符串与数字的转换 利用标准库中相关的类 字符串流类(sstream)用于string的转换 sstream相关头文件 istringstream字符串输入流 ostringstram字符串输出流 使用方法 string–>数字 istringstream iss("123.45");...

vict_wang的博客 1686

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++中的字符串指针和字符数组

字符串可以用字符数组与字符串变量两种方式来存储,效果类似。 一、用字符数组来存储字符串: char st1[100],st2[100] ; //字符数组说明 cin>>st1>>st2; long a,b; 输入:hello,  world 则st1={‘h’,’e’,’l’,’l’,’o’,’,’,’\0’} st2={‘w’,’o’,’r’,’l’,’d’,’\0} 字符’\0

a2796749的专栏 728

剖析Java和C/C++中的字符串的区别

剖析Java和C/C++中的字符串的区别 本文参考: https://blog.51cto.com/padden/489043 C语言中没有字符串这种数据类型,只有字符数组。 C++中既包括C语言的字符数组(C风格字符串),也有C++引入的string类型(‘s’小写)。 Java中,有String类型(‘S’大写),String类型不属于8大基本类型。 1、C风格的字符串 C风格字符串起源于C,并在C++中得到扩展。字符串存储在一个字符数组中,例如: const char *str = “zhan

qq_40833232的博客 2709

C++中的字符串和格式化输入/输出

关于C++,基础的概念便可不在叙述,这篇文章主要围绕于 C++中字符串相关内容 和 格式化输入\输出 ,那么,将离不开包含在头文件 stdio.h 中的 printf() 函数和 scanf() 函数。如果能够利用好这两个函数,那么不仅能与用户交互,还可根据个人喜好和任务要求格式化输出。 首先,我们先来了解字符串。 1.1字符串 字符串(character string)是一或多个字符的序列,例如 "Welcome to Shaanxi!" ,

m0_70690448的博客 5331

【C++】C++中的字符和字符串

目录结构: contents structure [-] 定义和初始化string string对象上的操作 处理string对象中的字符 C风格字符串 标准库类型string表示可变长的字符序列,使用string类型必须首先包含string头文件,作为标准库的一部分string定义在标准库std中。 #include <string>...

weixin_30556161的博客 93

C++中的字符串(String)和数值转换

『写在前边』 因为写PAT总是遇到字符串(主要是String)和数值之间的转化,所以整理一下以便好复习。 『String类型的字符串』 这里数值和字符串相互转换的例子,使用的是stringstream函数,在c++11当中有定义好的现成的函数取调用,非常方便。 1.【字符串转换为数值】 string和数值转换 转换类型 to_string(val) 把val转换成stri...

Miserable_ccf的博客 8万+

一文搞懂C++和MFC中的字符串,CString和string如何转换

在C的时代,还没有字符串类型,我们通过字符数组,或者char* 来处理 “字符串”。 通过在字符串的最后加上一个‘\0’, 来表示字符串的结束。所以没有字符串类型之前,我们总是在处理完字符串之后加个‘\0’,或者数字0(因为‘\0’对应的ASCII码值是0,注意字符‘0’对应的ASCII码值是0x30) 到了C++有了类型string,到了MFC有了 CString, 但是本质还是char*。 所以我们在转换的时候,就是通过char*进行中转,按照这个思路,我们就能很好理解这个转换的过程。 .

songhuangong123的博客 3595
上一篇: C++ STL中一些既是成员函数又是算法函数
下一篇: Java中正则表达式的一些概念和用法
py_cpp_java_c
博客等级 码龄3年 125粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值