尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

第二天—C++语法基础

第二天—C++语法基础
📅 发布时间:2026/6/18 21:16:47

1.String的声明与初始化

std::string 支持多种初始化方式,可根据实际场景灵活选择,以下是最常用的 6 种形式:

#include <iostream>
#include <string>int main(){// 声明并初始化一个空字符串std::string str1;// 使用字符串变量初始化字符串std::string str2 = "Hello, World";// 使用另一个 std::string 对象来初始化字符串std::string str3 = str2;// 使用部分字符串初始化字符串,substr(起始位置,长度)std::string str4 = str2.substr(0, 5);// 使用字符数组初始化字符串const char *charArray = "Hello";std::string str5(charArray);// 使用重复的字符初始化字符串,string(个数,字符)std::string str6(5, 'A');// 输出字符串内容std::cout << "str1:" << str1 << std::endl;std::cout << "str2:" << str2 << std::endl;std::cout << "str3:" << str3 << std::endl;std::cout << "str4:" << str4 << std::endl;std::cout << "str5:" << str5 << std::endl;std::cout << "str6:" << str6 << std::endl;return 0;
} 
补充:读取整行字符串(含空格):
默认的 cin >> str 会在空格 / 换行处停止读取,若需读取包含空格的整行字符串,需使用 getline(cin, str);

2.std::string输入输出

1.直接用cin和cout

#include <iostream>
#include <string>
using namespace std;int main() {string str;cin >> str;  // 读取到空格/换行前的字符串cout << "输出:" << str << endl;return 0;
}

2.兼容scanf和printf(需转换C风格)

  • C++中,std::string类提供了一个成员函数c_str(),用于返回一个指向以空字符结尾的C风格字符串(即const char*类型)。
  • 在进行printf输出时,需要将String转换成C风格的字符串进行输出
#include <bits/stdc++.h>
using namespace std;int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);char buf[100];	// 临时变量,用于输入scanf("%s", buf);	// 输入bufstring str(buf);	// 用buf来构造strprintf("str = %s\n", str.c_str());	// 输出strreturn 0; 
}
// 输入:Hello
// 输出:str = Hello

3.各种基本操作

  1. 获取字符串长度(length/size):

    • 两种方法完全等价,size()是STL容器的统一接口,length()是字符串专属接口
    #include <bits/stdc++.h>
    using namespace std;int main(){std::string str = "Hello, World";int length = str.length();	// 或者 int length = str.size();std::cout << "length:" << length << std::endl;return 0; 
    } 
    // 输出:length:12
    
  2. 拼接字符串(+或者append):

    • + 运算符:简洁直观,适合少量字符串拼接。
    • append() 函数:支持多参数(如子字符串、重复字符),更灵活。
    #include <bits/stdc++.h>
    using namespace std;int main(){std::string str1 = "Hello";std::string str2 = "World";std::string result1 = str1 + ", " + str2;	// 使用 + 运算符std::string result2 = str1.append(", ").append(str2);	// 使用append()函数std::cout << "Result1:" << result1 << std::endl;std::cout << "Result2:" << result2 << std::endl; return 0; 
    } 
    // 输出:Result1:Hello, World
    //		 Result2:Hello, World 
    
  3. 字符串查找(find):

    • find() 用于查找子字符串或字符,返回首次出现的索引;若未找到,返回 std::string::npos(一个特殊的无符号值)
    #include <bits/stdc++.h>
    using namespace std;int main(){std::string str = "Hello,World";size_t pos = str.find("World");		// 查找子字符串的位置if(pos != std::string::npos){std::cout << "Substring found at position:" << pos << std::endl;} else{std::cout << "Substring not found." << std::endl;}return 0; 
    } 
    // 输出:Substring found at position:7
    
  4. 字符串替换(replace):

    • 替换指定位置的子字符串,注意索引和长度不要越界
    #include <bits/stdc++.h>
    using namespace std;int main(){std::string str = "Hello,World";str.replace(7, 5, "Universe");	// 替换子字符串,replace(起始位置,长度,替换字符)std::cout << "Result:" << str << std::endl; return 0; 
    } 
    // 输出:Result:Hello,Universe
    
  5. 提取子字符串(substr):

    • 从指定位置提取子字符串,若省略长度,则提取到字符串末尾
    #include <bits/stdc++.h>
    using namespace std;int main(){std::string str = "Hello, World";std::string subStr = str.substr(7, 5);	// 提取子字符串,substr(位置,长度),注意不要越界std::cout << "Substring:" << subStr << std::endl;return 0; 
    } 
    // 输出:Result:Substring:World
    
  6. 字符串比较(compare):

    • std::string 重载了 ==、<、> 等运算符,可直接按字典序比较,比 compare() 更简洁
    #include <bits/stdc++.h>
    using namespace std;int main(){std::string str1 = "Hello";std::string str2 = "World";int result = str1.compare(str2);	// 比较字符串if(result == 0){std::cout << "String are equal." << std::endl;}else if(result < 0){std::cout << "String 1 is less than String 2." << std::endl; }else {std::cout << "String 1 is greater than String 2." << std::endl;} return 0; 
    } 
    // 输出:String 1 is less than String 2.
    
    string重载不了等号,所以可以直接使用s1 < s2的方式来比较string的大小,比较的规则是按照字典序大小进行比较。
    字典序的比较方法是从小到大一个一个比较,一旦遇到不相等的字符就确定大小关系例如:
    aaaa < bbbb
    azz < baaa
    azzzzz < b
    a = a
    
  7. 常用的便利string的方法有两种:

    • 循环枚举下标
    • auto枚举(其中&表示取引用类型,如果对i修改将会改变原来的值)
    #include <bits/stdc++.h>
    using namespace std;int main(){string s = "Hello";for (int i = 0;i < s.length(); ++i){cout << s[i];}cout << '\n';for(auto i : s){cout << i;i = 'a';	// 此处的修改无效,因为这个i是拷贝出来的,而不是引用s的 }cout << '\n';// 此时s = "Hello"for (auto i : s){cout << i;i = 'a';	// 此处修改会改变s的字符值 } cout << '\n';cout << s << '\n'; return 0; 
    } 
    // 输出:Hello
    //		 Hello
    //		 Hello
    //		 Hello
    

相关新闻

  • 自指自洽,别具一格的逻辑,千奇百怪的因果
  • 全源最短路(Johnson) - 教程
  • 我研发了一款电影截图拼接神器:Eagle 插件让你的影片收藏更专业

最新新闻

  • Kafka集群管理利器:Offset Explorer 3.0 核心功能实战解析
  • 2026年铝方通厂家推荐排行榜:东莞木纹铝方通/异形铝方通/铝方通吊顶/质感现代高性价比厂家精选 - 品牌发掘
  • 硬件设计-PLL篇(下):从理论到实战的性能调优
  • 基于深度学习yolov8的智能车牌识别系统设计1(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)
  • 上海本地贵金属流通规则,2026 黄金回收各类附加损耗明细讲解 - 奢侈品回收测评
  • 3分钟掌握Reflex框架:用纯Python构建全栈Web应用

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号