头一次起这种标题,为了对得起这个标题,我尽量多写点~

最近还是一边实习一遍投简历——笔试——面试,然而发现了自己的好多问题。

在答了京东笔试(滴滴,360也是这样的)的题后,发现与腾讯,阿里等公司的不同,它利用赛码网的服务,需要你编写可以正确运行的代码(也就是说有点类似机试),可以现在自己的机器上运行后拷贝过去。

我发现最基本的cin与cout都用不明白了。。。这样按照格式读取数据都是个问题~

所以总结一下,这里主要是cin为主如何接收固定格式的字符,数字,字符串等等,我列举了几种情况。

首先,说明一下c++接收字符的几种方式。都包含在#include<iostream>里面。

cin>>str1;   //这种方式默认接收不带空格的,回车表示用户输入结束,一句可以接收一个空格前的字符或字符串

cin.get(ch);   //这种方式可以接收字符

cin.get(str2,10); //这种方式可以接收 字符串(但是不接受string),第二个参数为字符串长度

cin.get();   //这种方式主要是用来舍弃输入流中不需要的字符

cin.getline(strs,16); //这种方式可以接收字符串数组,第二个参数也是字符串长度

cin.getline(strs,16,' '); //这种方式可以接收字符串数组,第三个参数是结束的标志,默认是’\0’。

getline(cin,strs); //这种方式可以接收string类型的字符串

首先以cin>>为主介绍一个重要的用法。代码如下:

char ch;

while(cin>>ch)

{

cout<<ch;

}

比如输入的

1 2  3

a b   c

那运行结果就是123abc,因为cin默认读取空白符(空格,回车,换行,制表,换纸)就会忽略掉。

想避免这种情况就需要设置一个方法。

cin>>noskipws;

下面代码:

char ch;

cin>>noskipws;

while(cin>>ch)

{

cout<<ch;

}

运行结果就是:

1 2  3

a b   c

所以,通过这条语句,我们就可以很容易的读取到各个字符,包括回车等,并且可以用判断语句来实现取舍。下面开始举例几种读取固定格式的方式(包括一些常见题目的解决方案):

1.      读取一个字符串,并且包含空格

①.用string数组: //string的好处多多,最明显的是可以随时修改长度与赋值

#include <string>;

string t=””;

a.下面使用的是最简单方法getline

getline(cin,t);   //读取一个字符串,可以读取(除了回车)空白符

b.下面的是用的cin.get(),下面的方法思想主要是利于字符串的读取实现

cin>>noskipws;     //这个很重要,否则就会永远进行循环

while(cin.get(tch))

{

t+=tch;

if(tch=='\n')

break;         //遇到回车符号就跳过这个字符,并退出循环

}

c.下面的是用cin

cin>>noskipws;

while(cin>>tc)

{

t+=tc;

if(tc=='\n')

break;

}

②用字符串数组: //字符串需要注意的就是字符串一旦完成初始化就不能直接赋值修改,结尾必须是’\0’,所以总的来说,用字符串数组还是相对麻烦的

个字符,一个结束符

int i=0;

a.下面的是用的cin.get();

cin>>noskipws;    
//这个很重要,否则就会永远进行循环

while(cin.get(str2))

{

if(str2=='\n')

break;        
//遇到回车符号就跳过这个字符,并退出循环

if(i<14)

{

str4[i]=str2;

str4[i+1]='\0'; 
//为了保证结尾是’\0’,否则会导致乱码

i++;

}

}

b.用cin,类比上面的即可,不再举例子

c.用cin.getline(strs,16,' \n '); 这样可以直接读取回车前的16个任何字符

2.      读取多个字符串,中间用空格隔开,回车结束.形式如下

Asd 123 333 dcd

stringstr[10];

char
tch;

for(inti=0;i<10;i++)

{

str[i]="";

}

cin>>noskipws;    
//这个很重要,否则就会永远进行循环

i=0;

while (cin.get(tch))

{

if(tch=='\n')

break;        
//遇到回车符号就跳过这个字符,并退出循环

if(tch==' ')

{

i++;continue;

}

str[i]+=tch;

}

3.      读取m*n个字符,每组字符用;隔开。形式如下(4*3)

a b c d;e f g h;I j k l(ab连在一起算两个字符)

chardata[100][100];

intnum1=0;

intnum2=0;

chartemp;

for(inti=0;i<100;i++)

{

for(intj=0;j<100;j++)

data[i][j]='?';

}

cin>>noskipws;

while(cin>>temp)

{

if(temp==';') {num1++;num2=0;continue;}

elseif(temp=='\n')
break;

elseif(temp==' ')
continue;

else

{

data[num1][num2]=temp;

num2++;

}

}

for(inti=0;i<num1+1;i++)

{

for(intj=0;j<num2;j++)

{

cout<<data[i][j]<<' ';

}

cout<<'\n';

}

4.      读取一组数字数字用空格隔开,遇到特殊字符则结束输入

如1 2 3 4 e,那么会记录1234这个int数组

intdata[10];

int
i1=0;

int
j1=0;

while(cin>>x)

{

data[i1]=x;

i1++;

}

for(j1=0;j1<i1;j1++)

cout<<data[j1];

5.      读取m*n个数字,每组数字用;隔开。形式如下(4*3)

1 2 3 4;11 12 13 14;5 6 7 8

提示:如果在cin>>数字的时候使用cin>>noskipws;那么只会读取第一个数字,空格以及其他非数字字符后的一切都会被忽略。

如果这个数组矩阵是大小固定的,那么就可以用for循环n次来解决先读取固定数目的数字,再用cin>>字符读取一个;再用一个for来循环m次读取组数。然而,我们的m与n都是不固定的,而且要用cin>>数字的话,导致无法在循环中判断每一个字符。所以,这里考虑先读取字符,然后转换成数字再处理。

先用string二维数组存起来,

string
data[10][10];

intnum[10][10];

int
num1=0;

int
num2=0;

char
temp;

for(inti=0;i<10;i++)

{

for(intj=0;j<10;j++)

data[i][j]="";

}

cin>>noskipws;

while(cin>>temp)

{

if(temp==';') {num1++;num2=0;continue;}

else
if(temp=='\n')
break;

else
if(temp==' '){num2++;
continue;}

else

{

data[num1][num2]+=temp;

}

}

for(inti=0;i<num1+1;i++)

{

for(intj=0;j<num2+1;j++)

{

//cout<<data[i][j]<<' ';

char  *ch;

ch=newchar(10);

strcpy_s(ch,20,data[i][j].c_str());   
表示替换的缓冲区大小

sscanf_s(ch,"%d",&num[i][j]);   
//这里是把char*转换为int

cout<<num[i][j]<<' ';          
//我们看到这里用的都是_s,是vs为了提高安全性而必须使用的

}                           //其实在一般编译环境下不加_s也是可以的

cout<<'\n';

}

多一个数字转换)

A12 3d 333;42 ds 12l;12 c4 32fc

string
data[10][10];

int
num1=0;

int
num2=0;

char
temp;

for(inti=0;i<10;i++)

{

for(intj=0;j<10;j++)

data[i][j]="";

}

cin>>noskipws;

while(cin>>temp)

{

if(temp==';') {num1++;num2=0;continue;}

else
if(temp=='\n')
break;

else
if(temp==' '){num2++;
continue;}

else

{

data[num1][num2]+=temp;

}

}

for(inti=0;i<num1+1;i++)

{

for(intj=0;j<num2+1;j++)

{

cout<<data[i][j]<<' ';

}

cout<<'\n';

}

C++按格式接收输入字符(京东,滴滴,360笔试必用)的更多相关文章

  1. EditText限制输入字符类型的几种方式

    最近的项目上需要限制EditText输入字符的类型,就把可以实现这个功能的方法整理了一下: 1.第一种方式是通过EditText的inputType来实现,可以通过xml或者Java文件来设置.假如我 ...

  2. (转)Android EditText限制输入字符的5种实现方式

    最近项目要求限制密码输入的字符类型, 例如不能输入中文.   现在总结一下EditText的各种实现方式,  以比较各种方法的优劣. 第一种方式:  设置EditText的inputType属性,可以 ...

  3. java基础45 IO流技术(输入字符流/缓冲输入字符流)

    一.输入字符流 1.1.输入字符流体系 ------| Reader:输入字符流的基类(抽象类)  ----------| FileReader:向指定文件读取数据的输入字符流(把硬盘上的数据读取到程 ...

  4. Java入门系列-07-从控制台中接收输入

    这篇文章帮你使用Scanner类从控制台接收输入 从控制台接收字符串 敲一敲: import java.util.Scanner; public class DemoScanner { public ...

  5. Java初学者作业——编写Java程序,实现判断所输入字符的类型(数字、小写字母、大写字母或其他字符)

    返回本章节 返回作业目录 需求说明: 编写Java程序,实现判断所输入字符的类型(数字.小写字母.大写字母或其他字符) 实现思路: 声明变量c,用于存储用户输入的字符. 通过Scanner接收用户输入 ...

  6. BufferedReader,缓冲输入字符流

    1. /** * 输入字符流: * --------|Reader 所有输入字符流的基类.抽象类 * -----------|FileReader 读取文件字符串的输入字符流. * --------- ...

  7. iOS 限制UITextField输入字符

    开篇 之前做过一个即时通信的项目,需要限制输入框文本的字符个数,当时从网络上搜寻了几个方法,解决了需求,但是网络上的解决办法不是很全面:今天又遇到一个限制搜索框UISearchBar输入字符个数的问题 ...

  8. 终端I/O之特殊输入字符

    POSIX.1定义了11个在输入时作特殊处理的字符.实现定义了另外一些特殊字符.表18-6摘要列出了这些特殊字符. 表18-6 终端特殊输入字符 在POSIX.1的11个特殊字符中,可将其中9个更改为 ...

  9. textarea中限制输入字符长度

    要在textarea中限制输入字符的长度,比如在twitter中要限制字符为140个,可实现的方法有: 1. <textarea name="A" cols="45 ...

随机推荐

  1. Java--分布式系统高并发解决方案

    对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研 ...

  2. automapper如何全局配置map条件过滤null值空值对所有映射起效

    原文 automapper如何全局配置map条件过滤null值空值对所有映射起效 我们在使用automapper的时候经常会遇到这样的问题:假设展示给用户的数据我们用UserDto类,User类就是我 ...

  3. matlab 读写其他格式数据文件(excel)

    1. excel matlab和excel 中的数据互相导入 xlswrite() mat ⇒ excel 请问怎么把大容量的mat文件导出到excel文件中 – MATLAB中文论坛 % data. ...

  4. thread、Task、async & await

    学习 Jesse 的文章 async & await 的前世今生(Updated) 而来 Thread是最开始使用的多线程.new一个Thread对象,将方法传进去.手动Start() 还可以 ...

  5. 使用xtrabackup实现MySQL主从复制

    环境描写叙述 主从环境 项目 Master Slave OS版本号 SuSE 11sp1 x86_64 SuSE 11sp1 x86_64 MySQL版本号 官方版本号5.5.37 官方版本号5.5. ...

  6. 跟我学ASP.NET MVC之十:SportsStrore安全

    摘要: 在之前的文章中,我给SportsStore应用程序添加了产品管理功能,这样一旦我发布了网站,任何人都可能修改产品信息,而这是你必须考虑的.他们只需要知道你的网站有这个功能,以及功能的访问路径是 ...

  7. scrapy技术进阶-URL路径依赖

    方法1: #!/usr/bin/python # -*- coding: gbk -*- import time from scrapy.spider import BaseSpider from s ...

  8. Open SSL 开发环境配置

    Open SSL 开发环境配置 最后更新日期:2014-05-13 阅读前提:VisualStudio的基本使用.Cent OS的基本使用 环境: Windows 8.1 64bit英文版,Visua ...

  9. MFC中获取App,MainFrame,Doc和View类等指针的方法

    From: http://hi.baidu.com/wxnxs/item/156a68f5b3b4ed18e3e3bd03   MFC中获取App,MainFrame,Doc和View类等指针的方法 ...

  10. Java之"Mozilla Rhino"引擎(二)

    在Java中使用Rhino, 能让你使用类似Groovy, ECMAScript...等等之类的不同动态脚本语言, 其中值得推荐的是ECMAScript, 它是Rhino的默认实现, 同时也在JDK1 ...