在C中使用string类输入与输出

2023-05-16

       问题描述:由于在考虑的C语言输入输出的效率较C++高,但string类在C++语言中使用具有较好的效果,所以在开发中就希望在使用C语言的输入输出string类型,但是C语言无法直接对string类进行操作,所以需要对string类数据进行处理。

       解决思路:思路一:众所周知C语言中的字符串类型为(char *)而对应的C++里面实质上string类型是对(char *)的封装。那么就可以使用string.h文件中的方法(c_str(),assign(int ,char))。对字符串进行赋值操作。思路二:在C语言中还提供有字符串的输入输出函数(char *gets(char *),int puts(char *))。

思路一、

 函数简介:

一、c_str()返回一个以‘\0’结尾的字符数组。
二、s.assign(int n,char ’x’);//把n个x赋给字符串。

代码如下:

//完成对一个字符串的输入与输出的基本操作
string str;
str.assign(100,'\n'); //这里初始化一个大笑为100的,内容为‘\0'的字符串数组。
scanf("%s",str.c_str());
printf("%s\n",str.c_str());

思路二、

函数简介:

char *gets(char *buffer):
          功能:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
         返回值:读入成功,返回与参数buffer相同的指针;读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。 所以在遇到返回值为NULL的情况,要用ferror或feof函数检查是发生错误还是遇到EOF。
        说明:不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值,为了避免这种情况,我们可以用gets_s()来替换gets()(注:C++11已经明确说明了使用gets_s()替代gets())。gets_s()的情况就在此不再说明,若想了解更多请与作者联系,或上网查阅资料。


int puts(char *str):  
        功能:打印出一组字符串(str);
        返回值:输出的字符串长度,如果输出失败返回值为EOF

//完成对一个字符串的输入与输出的基本操作
char str[100]; //指定内存大小为100,若输入输出超出内存长度则会报错,提示数组越界。
gets(str);
puts(str);

附:

++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy(),其中,data()以字符数组的形式返回
字符串内容,但并不添加’\0’。c_str()返回一个以‘\0’结尾的字符数组,而copy()则把字符串的内容复制或写入既有
的c_string或 字符数组内。C++字符串并不以’\0’结尾。我的建议是在程序中能使用C++字符串就使用,除非万不得已
不选用c_string。


更改内容:
这在字符串的操作中占了很大一部分。首先讲赋值,第一个赋值方法当然是使用操作符=,新值可以是string(如:s=ns)、c_string(如:s="gaint")甚至单一字符(如:s=’j’)。还可以使用成员函数assign(),这个成员函数可以使你更灵活的对字符串赋值。还是举例说明吧:

s.assign(str); //不说
s.assign(str,1,3);//如果str是"beatuful_girl" 就是把"eat"赋给字符串
s.assign(str,2,string::love);//把字符串str从索引值2开始到结尾赋给str
s.assign("gaint"); //不说
s.assign("nice",5);//把’n’ ‘i’ ‘c’ ‘e’ ‘\0’赋给字符串
s.assign(5,’x’);//把五个x赋给字符串

作者为初学者,文章若有不正之处或可以修改指出请与作者联系。

 

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

在C中使用string类输入与输出 的相关文章

随机推荐

  • 红黑树详解一

    文章目录 说在前面一 2 3 树二 2 3 树如何维护绝对的平衡三 红黑树与 2 3 树的等价性四 红黑树的基本性质和复杂度分析 说在前面 算法导论 中的红黑树 每个节点或者是红色的 xff0c 或者是黑色的根节点是黑色的每一个叶子节点 x
  • 蒙特卡洛树搜索 MCTS 入门

    引言 你如果是第一次听到蒙特卡洛 xff0c 可能会认为这是一个人名 那么你就大错特错 xff0c 蒙特卡洛不是一个人名 xff0c 而是一个地方 xff0c 还一个赌场名 xff01 xff01 xff01 但是这不是我们的重点 我们今天
  • 76-高斯核函数

    高斯核函数 上一篇博客详细的介绍了什么是核函数 xff0c 并且主要以多项式核函数为例 这篇博客主要学习一种特殊的核函数 xff0c 而且它也是 SVM 算法使用最多的一种核函数 xff1a 高斯核函数 核函数我们通常表示成 xff1a 那
  • 数仓实践:总线矩阵架构设计

    如何设计一套切实可行的数据仓库呢 xff1f 我们要明白 xff0c 对于数据仓库的设计是不能完全依赖于业务的需求 xff0c 但往往又必须要服务于业务的价值 因此 xff0c 在构建数据仓库前 xff0c 我们往往会通过总线矩阵设计 xf
  • 05 反向传播

    反向传播 上一篇博客介绍了从输入 X 样本开始 xff0c 通过一组 w w w 参数 xff0c 得到了一个得分值 xff0c 然后又将得分值经过 y 61
  • 07 神经网络整体架构

    神经网络整体架构 我们先看看神经网络是什么样子的 xff0c 如下图 可以说神经网络是一个层次的结构 xff0c 有一个输入层 xff0c 隐层 1 xff0c 隐层 2 和输出层 可以说是由多个层组成了一个完整的神经网络 输入层相当于输入
  • 地震勘探原理(一)之地震波的基本概念

    绪论 一 石油勘探的主要方法 地质法 岩石露头物探法 覆盖区 连续测量 间接钻井法 一点 直接勘探 二 地球物理勘探方法 重力法 岩石密度差异磁法 演示磁性差异电法 岩石电性差异地震勘探方法 岩石弹性差异 xff08 用得最多 xff0c
  • 地震勘探原理(二)之时距曲线

    文章目录 什么是时距曲线 xff1f 直达波的时距曲线水平界面的共炮点反射波时距曲线方程 xff08 一个分界面 xff09 倾斜界面的共炮点反射波时距曲线正常时差倾角时差 xff08 dip moveout xff09 时局曲面和时间场的
  • 地震勘探原理(四)之频谱分析概述

    文章目录 一 频谱的基本概念二 频谱的主要特征 振幅谱和相位谱三 获取频谱的方法四 傅里叶展式的重要性质五 地震波频谱特征及其应用六 线性时不变系统的滤波方程七 频率滤波参数的选择 一 频谱的基本概念 频谱 xff08 Spectrum S
  • 模糊C均值聚类算法

    学习了一下模糊聚类中的模糊 C 均值聚类算法 Fuzzy C Means Clustering Fuzzy 意为模糊 xff0c 其中包括几种模糊的方式 xff0c 这里使用的是最简单的方式 xff0c 它是基于概率的概念 我们把每一个点属
  • 数据建模之查文献找数据以及数据预处理

    1 查文献 知网 xff1a 先看硕博士论文谷歌学术镜像 xff1a http scholar scqylaw com Open Access Library xff1a https www oalib com 2 找数据 优先 xff1a
  • 数学建模之论文

    一篇完整的数模论文 包括摘要 最重要 问题重述 模型假设和符号说明 模型建立与求解 最长 模型的优缺点与改进方法 参考文献和附录 1 摘要 最重要 论文研究的问题 43 使用的方法 43 得到的结果 43 每一部分的大致步骤 2 问题重述
  • Deformable Convolution 可变形卷积

    可变形卷积概念出自2017年论文 xff1a Deformable Convolutional Networks 顾名思义 xff0c 可变形卷积的是相对于标准卷积的概念而来 a 一个经典的 3 3 3 times3 3 3
  • 模块化

    模块化 遵守固定的规则 xff0c 把一个 大文件 拆成 独立并互相依赖 的 多个小模块 优点 xff1a 提高了代码的 复用性 提高了代码的 可维护性 可以实现 按需加载 模块化规范 xff1a 降低沟通成本 xff0c 方便模块间的相互
  • 栈的应用:左右符号匹配

    说明 xff1a 在编译器中 xff0c 都有这么一个左右符号匹配的功能 xff0c 这里通过栈来模拟实现这一功能 xff1b 这里采用了代码复用的方法 xff0c 即使用了LinkStack链栈 xff0c 详见 LinkStack链栈
  • windows安装gcc

    完整报错 xff1a RuntimeError Error building extension 39 fused 39 1 3 C Program Files NVIDIA GPU Computing Toolkit CUDA v11 4
  • openstack-mitaka(一) 架构简介

    官网 xff1a OpenStack Docs 概况 1 openstack概况 OpenStack是一个云操作系统 xff0c 它控制整个数据中心的计算 存储和网络资源的大型池 OpenStack通过各种补充服务提供基础设施即服务 Inf
  • ITK和VTK读取DICOM图像文件

    ITK和VTK读取DICOM图像文件 ITK读取DICOM图像 相比于VTK类库中vtkDICOMImageReader类读取DICOM序列图像 xff0c 借助ITK类库实现对DICOM序列图像的读取要复杂许多 但是 xff0c 使用IT
  • 一招完美解决vscode安装go插件失败问题

    vscode 安装go插件 前置用vscode新建一个go文件使用go mod 代理来安装 前置 从https studygolang com dl下载go1 14 6 windows amd64 msi安装即可 xff0c 安装路径选择默
  • 在C中使用string类输入与输出

    问题描述 xff1a 由于在考虑的C语言输入输出的效率较C 43 43 高 xff0c 但string类在C 43 43 语言中使用具有较好的效果 xff0c 所以在开发中就希望在使用C语言的输入输出string类型 xff0c 但是C语言