C/C++编程题开头字符串、数据输入几种写法

2023-11-19

1、题设

  在IT公司编程题中,多数会让你一并写上测试数据输入和结果输出的Demo,这也是程序员基本的功底。想一想如果连自己的测试数据都无法给入,后面的算法写的再好,也无法测试它的准确性和效果。下面分别从c、c++,以及字符串输入和数组输入,来谈谈几种常见写法。

2、程序分析

   2.1 正常字符串输入 

   2.1.1 C语言做法
    一个不包括空格的字符串写法很简单,不再赘述,下面直接上程序:
         char nzArr[100];
         scanf("%s",nzArr);	
        或者动态分配地址,不用字符串数组,但记得在最后释放空间:
  (记得添加头文件,malloc函数接口是声明在stdlib.h头文件中)
         char *nzArr1 = (char*)malloc(100*sizeof(char));  //分配100个保存char类型数据空间
         scanf("%s",nzArr1);
                  ... ... 

           free(nzArr1);

  这两种都行,如果题目没让先输入具体字符串长度,可以使用第一种字符串数组,简单,申请空间视情况而定。但是如果题设让先输入字符串长度,然后下一行输入一行字符串,第二组更省内存和好理解,即: 

	int nLen;
	scanf("%d",&nLen);
	char *nzArr1 = (char*)malloc(nLen*sizeof(char));
	scanf("%s",nzArr);	
  注:使用VS调试的朋友一定需要注意,标准scanf和printf函数接口是声明在stdio.h中,但是在VS可能因为内嵌其它标准库中原因,你未添加stdio.h头文件也能运行,但是gcc编译环境不添加会直接报错。所以自己无论什么时候调试,最好加上stdio.h头文件。

      2.1.2 C++做法
      C++其实更多的输入和输出是从流的角度去考虑,也不再细说,直接看程序:
      
       char nzArr[100];
       int nLen;
       cin>>nLen;
       char *nzArr1 = (char*)malloc(nLen*sizeof(char));
       cin>>nzArr;
       cin>>nzArr1;
        但是需要记住头文件#include<iostream>,#include<cstdlib>,以及命名空间using namespace std。这样cin和cout才能被编译器找到和识别。
        这块细心的朋友可能发现,我前后写malloc所声明的头文件不一样。c中是stdlib.h,而c++中是cstdlib。这主要是c++像c兼容,为了以示区别,c++库头文件都将.h的头文件名修改成了c开头文件名。这样的还有如math.h和cmath。实质是一样的,因为兼容性,在c++中,你添加stdlib.h也能找到对应函数的声明。所以c和c++慢慢的已经融合到一起使用。

   2.2 输入一段字符串语句

     这里我不再区分c和c++的写法,上面已说明。这里直接进入正题,有些编程题让你输入一段字符串语句保存在字符串数组中,而且并没告诉你包含多少字符,以及还包含空格。所以这里就不能简单的像上面那样去处理了。因为保存一个字符串会在空格处断开,后面直接舍弃。如果用流的方式读入,这就设计申请二位字符串数组,很麻烦。
      这里我们需要调用流读入一整行的方式,具体程序如下:

       char nzArr[100];
       cin.getline(nzArr,100);//当换行后获得流中100个字符,如果没有提前加上字符串结束符'\n'。
          如果想知道自己输入了多少个字符(包括空格),可以调用计算字符串长度的函数:         

       #include<cstring>
       //或者#include<string.h>,但是不可以<string>,这是另外一个头文件,以后再详细描述
       int nLen = strlen(nzArr);
          strlen计算字符串长度是到结束符'\n'为止,所以与你开始保存的字符串申请空间大小无关。上面也是一样,也可以调用该函数计算字符串长度。

      2.3 数字数据输入

        数字数据获得就简单一些,一次一次从流中读入即可。也是一样,这里我不在分c和c++讲解,与上文一样。一般输入数字数据,会让你先输入数据个数,然后另起一行,隔个空格输入一个数据。具体程序实现如下:

      int nLen;
      cin>>nLen;
      int nArr[100];
      //或者动态申请地址也是一样。
      for(int i=0; i<nLen;i++)
      {
         cin>>nArr[i];
         //或者scanf("%d",&nArr[i]);
       }
           你只需要每隔一个空格输入一个数据即可,当你输入完成换行,for语句会依次从流中读入你输入的每个数据。哪怕你输入超过nLen,它也只读取前nLen个。

      转载请注明出处:CSDN 无鞋童鞋。



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

C/C++编程题开头字符串、数据输入几种写法 的相关文章

随机推荐

  • Qt 不规则窗口,不规则按钮,不规划控件 不规则界面

    有一些特殊情况 需要使用不规则窗口或按钮 看起来非常炫酷 类似 Qt 实现 不规则样式设置 不是视觉欺骗 是真正的不规则 点击外面不会触发按钮的点击信号 Part1 不规则窗口 效果 显示成一张图片中的图形 使用带有透明区域的png图片 i
  • 设计模式--提供者模式provider

    设计模式 C 提供者模式 Provider Pattern 介绍 为一个API进行定义和实现的分离 示例 有一个Message实体类 对它的操作有Insert 和Get 方法 持久化数据在SqlServer数据库中或Xml文件里 根据配置文
  • sql 求日期均值

    备忘一下 在sql中求日期均值的语句 首先 AVG 只能作用与数值型字段 不能作用于日期字段 所以不能像求数值均值一样求日期均值 要求日期均值 需要先把 日期转为Long 然后对转后的Long求均值 对Long求完均值 在把Long转为 日
  • git 将本仓库的分支代码提交到另外一个仓库

    因为新项目开发的项目代码是建立在另外一个项目的代码框架上进行样式与逻辑功能修改 所以为了省事 想着把旧仓库的temp分支代码直接提交到新仓库master分支底下进行项目开发 所以需要在git上进行一些操作 将本仓库的分支代码提交到另外一个仓
  • 【Linux扩容】Vmware虚拟机内的Linux扩容

    1 虚拟机设置 Vmware 虚拟机 设置 硬盘 扩展 40 64G 2 Linux磁盘扩展 有图形化桌面 GParted 分区上右键 扩展 保存 无图形化桌面 找一个有图形化桌面的Linux live镜像 CD载入 或者LinuxToGo
  • Linux网络编程之Tcp(内含服务器、客户端代码实例)

    文章目录 前言 Tcp模型 服务器端 客户机端 代码 运行结果 结束 前言 本节讲解需要相关的网络基础知识 如果缺少相关知识 请先学习 Linux网络编程之网络基础 和 Linux网络编程之网络基础2 Tcp模型 先打开我们之前讲过的Tcp
  • CVE-2021-40444漏洞复现详细

    2021年9月8日 微软官方发布了MSHTML组件的风险通告 漏洞编号 CVE 2021 40444 未经身份验证的攻击者可以利用该漏洞在目标系统上远程执行代码 微软官方表示已经监测到该漏洞存在在野利用 1 漏洞详情 Microsoft M
  • js 本地存储和获取

    localStorage setItem temp orderAr 存入 参数 1 调用的值 2 所要存入的数据 console log localStorage getItem temp 输出
  • 安装用jieba,实现用TF-IDF算法进行关键词的提取

    文本知识提取 目录 1 安装jieba 2 TF IDF算法 2 1算法的定义 2 2算法的应用 1 词性标注 2 去停用词 3 关键词提取 1 安装jieba Jieba分词官网 https github com fxsjy jieba
  • 基于k8s的微服务一键部署解决方案

    父项目msagd配置 编写pom xml的属性标签
  • Day8_8 Java学习之List集合类

    目录 一 List集合的概述 ArrayList集合类的概述 ArrayList集合的语法定义 ArrayList集合的常用方法 LinkedList集合概述 LinkedList集合的语法定义 LinkedList集合类常用方法 二 Se
  • Unity项目资源加载管理简易框架(Resource)

    文章目录 一 背景 二 思路概述 三 具体实现代码及其思路梳理 1 资源路径 2 资源管理 3 资源加载 4 资源管理 四 说明 一 背景 在Unity的轻量型项目中如果对优化没有特别搞得要求 如果需要用到Resource Load这个接口
  • 算高差改正数的计算机程序,水准测量中测量高差的改正数怎么计算?

    原标题 水准测量中测量高差的改正数怎么计算 工程测量中 高速铁路 城市轨道涉及到二等水准 一般铁路涉及三 四等水准 高速公路 房建 市政一般采用四等水准 沉降观测各等级均涉及 在水准测量中高差的改正三四等水准需要进行水准标尺长度改正 正常水
  • 基于51单片机简易电子琴设计(含Keil程序和Proteus文件)

    一 系统概述 系统使用的模块有AT89C51单片机 8位共阳数码管 矩阵键盘 小灯 按键 蜂鸣器 本次设计的电子琴系统以AT89C51单片机为控制核心 使用数码管显示音符 右侧的矩阵键盘可以理解为琴键 按下不同的按键就能显示不同的音符 按下
  • 最新服务器CPUe5,看这里!2019 至强 Xeon E5 服务器系列 CPU 天梯图分享

    排名名称评分 1Intel Xeon E5 2679 v4 2 50GHz25 236 2Intel Xeon E5 2699 v4 2 20GHz23 200 3Intel Xeon E5 2696 v3 2 30GHz22 548 4I
  • LNCS用户写作指南【 Springer Computer Science Proceedings 】

    转自 http blog csdn net wyskys article details 18075471 重点是文末的参考文献格式 主要的是 链接 期刊论文 会议论文的引用格式 下載地址 http static springer com
  • Jsoup 抓取网页内容demo

    1 代码 public Document getDocument String url try return Jsoup connect url get catch IOException e e printStackTrace retur
  • 为什么电脑的时间总是快2分钟

    由于工作需要 今天领到一台新的笔记本 轻轻地抚摸 新伙伴 的同时 发现笔记本的时间 快了2分钟 o o表情 明明已经联网了 为啥还是快两分钟呢 于是我就一顿操作猛如虎 结果一看 服务器连接的是 time windows com 这可不行 我
  • 【Linux】Ubuntu系统下用apt命令删除/卸载软件包

    大家都知道 在ubuntu中安装一个新的软件包时 直接使用sudo apt get install命令就好 那么 如果要卸载或者删除一个软件包呢 1 删除为了满足依赖而安装的 但现在不再需要的软件包 包括已安装包 保留配置文件 这个命令容易
  • C/C++编程题开头字符串、数据输入几种写法

    1 题设 在IT公司编程题中 多数会让你一并写上测试数据输入和结果输出的Demo 这也是程序员基本的功底 想一想如果连自己的测试数据都无法给入 后面的算法写的再好 也无法测试它的准确性和效果 下面分别从c c 以及字符串输入和数组输入 来谈