C++按格式接收输入字符(京东,滴滴,360笔试必用)
头一次起这种标题,为了对得起这个标题,我尽量多写点~
最近还是一边实习一遍投简历——笔试——面试,然而发现了自己的好多问题。
在答了京东笔试(滴滴,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笔试必用)的更多相关文章
- EditText限制输入字符类型的几种方式
最近的项目上需要限制EditText输入字符的类型,就把可以实现这个功能的方法整理了一下: 1.第一种方式是通过EditText的inputType来实现,可以通过xml或者Java文件来设置.假如我 ...
- (转)Android EditText限制输入字符的5种实现方式
最近项目要求限制密码输入的字符类型, 例如不能输入中文. 现在总结一下EditText的各种实现方式, 以比较各种方法的优劣. 第一种方式: 设置EditText的inputType属性,可以 ...
- java基础45 IO流技术(输入字符流/缓冲输入字符流)
一.输入字符流 1.1.输入字符流体系 ------| Reader:输入字符流的基类(抽象类) ----------| FileReader:向指定文件读取数据的输入字符流(把硬盘上的数据读取到程 ...
- Java入门系列-07-从控制台中接收输入
这篇文章帮你使用Scanner类从控制台接收输入 从控制台接收字符串 敲一敲: import java.util.Scanner; public class DemoScanner { public ...
- Java初学者作业——编写Java程序,实现判断所输入字符的类型(数字、小写字母、大写字母或其他字符)
返回本章节 返回作业目录 需求说明: 编写Java程序,实现判断所输入字符的类型(数字.小写字母.大写字母或其他字符) 实现思路: 声明变量c,用于存储用户输入的字符. 通过Scanner接收用户输入 ...
- BufferedReader,缓冲输入字符流
1. /** * 输入字符流: * --------|Reader 所有输入字符流的基类.抽象类 * -----------|FileReader 读取文件字符串的输入字符流. * --------- ...
- iOS 限制UITextField输入字符
开篇 之前做过一个即时通信的项目,需要限制输入框文本的字符个数,当时从网络上搜寻了几个方法,解决了需求,但是网络上的解决办法不是很全面:今天又遇到一个限制搜索框UISearchBar输入字符个数的问题 ...
- 终端I/O之特殊输入字符
POSIX.1定义了11个在输入时作特殊处理的字符.实现定义了另外一些特殊字符.表18-6摘要列出了这些特殊字符. 表18-6 终端特殊输入字符 在POSIX.1的11个特殊字符中,可将其中9个更改为 ...
- textarea中限制输入字符长度
要在textarea中限制输入字符的长度,比如在twitter中要限制字符为140个,可实现的方法有: 1. <textarea name="A" cols="45 ...
随机推荐
- Linux(Centos7)下自动启动程序
1.文件转移 先将要执行的文件转移或复制到路径较短的地方如:/usr/local 主要是为了方便,同时防止误删.2.编写Service文件 $ vim /usr/lib/systemd/system/ ...
- python 和为S的连续正数序列
题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久, ...
- QList介绍(QList比QVector更快,这是由它们在内存中的存储方式决定的。QStringList是在QList的基础上针对字符串提供额外的函数。at()操作比操作符[]更快,因为它不需要深度复制)非常实用
FROM:http://apps.hi.baidu.com/share/detail/33517814 今天做项目时,需要用到QList来存储一组点.为此,我对QList类的说明进行了如下翻译. QL ...
- 3DMax模型输入到WPF中运行
原文:3DMax模型输入到WPF中运行 其实看看笔者文章之前,可以在网上搜索下将3Dmax模型输入到WPF的办法,大部分结果都是这篇文章.这篇文章呢?有点麻烦,就是我们3Dmax模型转换到Blend的 ...
- WPF 获得DataGridRow和 DataGridCell的方法
原文:WPF 获得DataGridRow和 DataGridCell的方法 原文地址 简介 在WPF中,DataGrid控件并没有提供访问其DataGridRow或者DataGridCell的方法. ...
- C# ToString() 数据格式
double[] numbers= {1054.32179, -195489100.8377, 1.0437E21, -1.0573e-05}; string[] specifiers = { &qu ...
- EF context.SaveChanges()特点
EF context.SaveChanges()特点 1 一次连接保存多条数据(工作单元模式): 2 内部通过事务来执行,如果一条数据保存失败,执行回滚操作: 3 延时加载 var userList= ...
- Bootstrap按钮组 按钮工具栏 嵌套
@{ Layout = null;}<!DOCTYPE html><html><head> <meta name="viewport&q ...
- SICP 1.17-1.19
1.16 -------------> 不考虑0的情况 <------------ (define (fe b n) (define (fet m c) (cond ((= m n) c) ...
- C#原子性运算 interlocked.compareExchanged
缘起: 假设有一个类myClass, myclass里有一个count属性. 在多线程的环境下 每个线程中 直接使用count++, 如果两个线程并行执行时, 两个线程中的一个的结果会被覆掉, 非线 ...