标准库类型sring

2023-11-03

1、string 类型表示可变长的字符序列,需要包含头文件 include

2、定义和初始化 string 对象

在这里插入图片描述
拷贝初始化:使用了“=”号
直接初始化:用“()”。

3、string 对象的操作

在这里插入图片描述
cin << string; //会忽略前面的空白的无效字符,最后遇到空格会停止输入。

4、使用getline读取一整行

有时我们希望能在最终得到的字符串屮保留输入时的空白符,这时应该用getline函数代替原来的>>运算符。getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为止(注意换行符也被读进来了),然后把所读的内容存入到那个string对象中去**(注意不存换行符)**getline只要一遇到换行符就结束读取操作并返回结果,哪怕输入的一开始就是换行符也是如此。如果输入真的一开始就是换行符,那么所得的结果是个空string。

练习3·2:编写一段程序从标准输入中一次读入一整行,然后修改该程序使其一次读入

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

int main()
{
	string wold;
//	while (cin >> wold) {			//读入一个单词
	while (getline(cin ,wold)) {	//读入一行
		cout << wold << endl;
	}

	return 0;
}

练习3.3:请说明string类的输入运算符和getline函数分别是如何处理空自字符的。
输入运算符cin:会忽略string对象前面的空格,当输入有效字符后,再输入空格,判断输入结束。
getline函数:会将输入的空格存入string对象,遇到换行符结束,换行符不存入string中。

练习3.4:编与一段程序读入两个字符串,比较其是否相等并输出结果。如果不相等,输出较大的那个字符串·改写上述程序,比较输入的两个字符串是否等长,如果不等长,输出长度较大的那个字符串。

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

int main()
{
	string s1, s2;
	cout << "请输入s1 、s2 :" << endl;
	cin >> s1 >> s2;
	if (s1 > s2) {
		cout << s1 << "较大" << endl;
	}
	else if (s1 < s2) {
		cout << s2 << "较大" << endl;
	}
	else {
		cout << s1 << "与" << s2 << "相等" << endl;
	}

	if (s1.size() > s2.size()) {
		cout << s1 << "较长" << endl;
	}
	else if (s1.size() < s2.size()) {
		cout << s2 << "较长" << endl;
	}
	else {
		cout << s1 << "与" << s2 << "等长" << endl;
	}

	return 0;
}

练习3.5:编与一段程序从标准输入中读入多个字符串并将它们连接在一起,输出连接成的大字符串。然后修改上述程序,用空格把输入的多个字符串分开来。

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

int main()
{
	string s1,s2,s3;
	while (cin >> s1) {
		s2 += s1;	
	}
	cout << s2 << endl;
	fflush(stdin);
	cin.clear();
	cout << "请输入带空格的字符串" << endl;
	getline(cin, s3);
	cout << s3 << endl;
	return 0;
}

5、string 对象中字符的处理

在这里插入图片描述

6、可以使用索引(下标)来修改string字符串

需要特别注意下标的合法性!
在这里插入图片描述
练习3.6;编写一段程序,使用范围for语句将字符串内的所有字符用×代替。

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

int main()
{
	string str("hello world");
	for (auto &c : str) {
		c = 'X';
	}
	cout << str << endl;
	return 0;
}

练习3.7:就上一题完成的程序而言,如果将循坏控制变量的类型设为char将发生什么?先估计一下结果,然后实际编程进行验证。
结果和上述相同。

练习3.8:分别用while循环和传统的for循环重写第一题的程序,你觉得哪种形式更好呢?为什么?

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

int main()
{
	string str("hello world");
	if (!str.empty()) {
		for (int i=0; i < str.size(); i++) {
			str[i] = 'X';
		}
	}
	cout << str << endl;

	str = "hello world";
	int i = 0;
	while(i < str.size()) {
		str[i] = 'X';
		i++;
	}
	cout << str << endl;
	return 0;
}

范围for形式上更简洁一点。

练习3。9 下面的程序有何作用?它合法吗?如果不合法,为什么?

	string str;
	cout << str[0] << endl;

上述程序定义了一个字符串对象 str,但是没有初始化,故执行默认初始化为一个空字符串。然后使用cout输出流打印str[0],由于str是空字符串,因此程序运行的结果是未知的。故它不合法,使用下标运算符时必须要检验其合法性,否则会造成不可预料的后果。

练习3.10:编写一段程序,读入一个包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分。

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

int main()
{
	string str("hello world!!!how are you!I find thank you.");
	string str2;
	for (auto& c : str) {
		if (ispunct(c)) {
			continue;
		}
		str2 += c;
	}
	cout << str2 << endl;
	

	return 0;
}

练习3.11:下的范围for语句合法吗?如果合法,c的类型是什么?

	const string s = "Keep out!";
	for (auto& c : s) {
		......;
	}

当for循环中尝试去修改s的值时,不合法,s是常量,不能去修改她的值。
如果只是去读取s的值,则是合法的,此时auto为unsigned char。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

标准库类型sring 的相关文章

  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • Jmeter使用HTTP代理服务器无法打开网页问题的解决方法

    大家都知道Jmeter有录制HTTP请求的功能 HTTP代理服务器中 但是在操作中却会提示如下页面 Root CA certificate ApacheJMeterTemporaryRootCA created in JMeter bin
  • Apache Tomcat 8.5安装配置教程

    一 安装JDK步骤及配置JDK环境变量步骤省略 二 安装Tomcat 提前请先安装JDK 三 安装官网 直接点击 Tomcat很特殊 各个版本之间可能会相互不兼容 这里示例安装8 5的版本 点击tomcat8后根据自己的电脑选择相应的型号
  • git终端显示分支名称

    在使用git操作的时候 有时候会记错当前自己是在哪个分支上 从而造成一些不必要的麻烦 比如需要在某个分支上开发某个特性 结果误在master分支上进行了相关的操作 并且还push到了远端仓库 事后自己有可能还并不知晓 从而给自己带来了不必要
  • HTML基本标签

    文章目录 前言 一 HTML简介 二 HTML标签介绍 1 标题标签 2 段落标签 3 换行标签 4 hr标签 5 span标签 6 div标签 7 img标签 8 超链接标签 9 注释标签 10 特殊字符 11 格式化标签 12 sup上
  • 解决qt在线安装慢的方法

    iso mirrors ustc edu cn qtproject official releases online installers qt unified windows x64 online exe 步骤 1 点击上面链接 下载qt
  • web操作系统开发的_哪种操作系统更适合Web开发

    web操作系统开发的 If you re new to web development and are in the market for a new laptop you might be wondering which operatin
  • 17.linuxGPIO应用编程

    除了LED类设备可以通过sysfs文件系统控制以外 还可以使用该虚拟文件系统控制GPIO的高低电平 输入以及中断检测 一 GPIO控制高低电平 进入目录sys class gpio下可以看到有如下文件 其中gpiochip0对应硬件的GPI
  • 导入数据出错With the Partitioning, OLAP and Data Mining options

    因为oracle没有启动分区Partitioning 启动方法 pl sql执行 select from v option where parameter Partitioning
  • mybatis 遍历map实例

    mybatis 遍历map实例 map 数据如下 Map
  • 2021年6月程序员工资统计,平均15052元,你拖后腿了吗?

    2021年6月全国招收程序员435501人 2021年6月全国程序员平均工资15052元 工资中位数13000元 其中96 的人的工资介于1750元到150000元 这两年虽然平均工资涨了不少 但是工资中位数没怎么变 这说明什么呢 一 主要
  • 数据库文件怎么查看服务器,服务器如何查看文件个数据库文件

    服务器如何查看文件个数据库文件 内容精选 换一换 通常在将数据导入数据库前 即将入库的数据已经在相关主机上了 我们称这种保存着待入库数据的服务器为数据服务器 此时 只需检测以确认数据服务器和GaussDB for openGauss 集群能
  • 【Posts阅读】关于 Deep Sets 和 Neural Processes的简单介绍

    A Gentle Introduction to Deep Sets and Neural Processes 关于 Deep Sets 和 Neural Processes的简单介绍 Link https gordonjo github
  • 无法定位软件包:libappindicator3-1_libappindicator3-1软件包安装失败

    libappindicator3 1 所依赖的软件包 libindicator3 7 上链接 libindicator3 7 官网地址 http ftp cn debian org debian pool main libi libindi
  • GORM-GEN快速上手

    目录 1 什么是 GEN 2 GEN特性 3 快速使用GEN 3 1 下载 3 2 生成 4 基础查询 5 自定义 SQL 查询 6 demo源码 1 什么是 GEN 官方文档 Gen Guides GORM The fantastic O
  • warning: ignoring unsupported character ‘问题修复

    rivers net wireless aic8800 Kconfig 1 ignoring unsupported character 问题修复 有一次编译内核 看到有下面的warning jian jian share kylin rk
  • windows live writer 离线写blog

    微软发布的软件windows live writer 可以离线写blog 也就是说 你可以在windows live writer这个软件编辑blog 然后点击 发布 见blog发送到指定网页上 前提是需要在windows live wri
  • 关于ios手机嵌套h5页面滚动兼容问题解决

    1 使用绝对定位 滚动元素使用绝对定位 position absolute top 0 left 0 bottom 0 height 100vh overflow y srcoll 2 添加兼容样式 webkit overflow scro
  • 华为OD机试 - 最大括号深度(Java)

    题目描述 现有一字符串仅由 六种括号组成 若字符串满足以下条件之一 则为无效字符串 任一类型的左右括号数量不相等 存在未按正确顺序 先左后右 闭合的括号 输出括号的最大嵌套深度 若字符串无效则输出0 0 字符串长度 100000 输入描述
  • stats

    本篇介绍基础包stats中的一个函数nls 它的作用是求解非线性回归的待定参数 nls formula data start control algorithm trace subset weights na action model lo
  • 标准库类型sring

    1 string 类型表示可变长的字符序列 需要包含头文件 include 2 定义和初始化 string 对象 拷贝初始化 使用了 号 直接初始化 用 3 string 对象的操作 cin lt lt string 会忽略前面的空白的无效