标准库类型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 的相关文章

  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri

随机推荐

  • 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 会忽略前面的空白的无效