C++(六)— 输入方式
1、输入包含空格的字符串
使用 getline(cin, str)读取一行字符串,遇到换行符停止;cin>>str,是遇到空格就停止。
实现:输入两个字符,在第一个字符中删除第二个字符中出现的所有字符。
int main()
{
string str1;
string str2;
getline(cin, str1);//输入是“abc smd djndje”
getline(cin, str2);
map<char, int> m;
for (int i = ; i < str2.size(); ++i)
m[str2[i]]++;
for (int i = ; i < str1.size(); ++i)
{
if (m.count(str1[i]) == )
{
str1.erase(i, ); //这里删除后,索引要减一
i--;
}
}
cout << str1; cout << endl;
system("pause");
return ;
}
2、第一行输入数组长度,第二行数组
例:
3
1 2 3
cout << "please input the number of vector's element" << endl;
int num;
cin >> num;
vector<int> v;
int temp;
for (int i = ; i < num; ++i)
{
cin >> temp;
v.push_back(temp);
}
for (int i = ; i < v.size(); i++)
{
cout << v[i] << " ";
}
3、输入一组数,不知道长度,遇到回车结束
例:
1 2 3 回车
vector<int> v;
int temp;
while(cin>>temp)
{
v.push_back(temp);
//等价于if (cin.get() == '\n')
if (getchar() == '\n') //遇回车结束
break;
}
for (int i = ; i < v.size(); i++)
{
cout << v[i] << " ";
}
4、输入一维数组,保存到 vector 中
例:
输入:[11,33,55,666]
输出:11 33 55 666
#include <vector>
#include <string>
#include <iostream>
using namespace std; void SplitString(const string& s, vector<int>& v, const string& c)
{
int pos1=, pos2;
pos2 = s.find(c);
while (string::npos != pos2)
{
v.push_back(stoi(s.substr(pos1, pos2 - pos1)));
pos1 = pos2 + c.size();
pos2 = s.find(c, pos1);
}
if (pos1 != s.length())//如果有最后一个数,将其加入到数组中
v.push_back(stoi(s.substr(pos1)));
} int main() {
string s = "[11,33,55,666]";
s = s.substr(, s.size() - ); vector<int> v;
SplitString(s, v, ","); //可按多个字符来分隔;
for (int i = ; i < v.size(); ++i)
cout << v[i] << " ";
cout << endl;
//输出: a b c d e f
}
或者使用getline()函数
vector<int> stringToIntegerVector(string input) {
vector<int> output;
input = input.substr(, input.length() - );
stringstream ss;
ss.str(input);
string item;
char delim = ',';
while (getline(ss, item, delim)) {
output.push_back(stoi(item));
}
return output;
}
int main() {
string line;
while (getline(cin, line)) {
//将输入的字符串转换为数组
// [1,2,3,4] -> 存入到 vector 数组中
vector<int> nums = stringToIntegerVector(line);
int ret = Solution().maxProduct(nums);//你自己的计算函数
string out = to_string(ret);
cout << out << endl;
}
return ;
}
5、上面4的另一种写法,输入字符,保存字符
区别:getline()的方法只能用单个字符来进行分割。getline每遇到一个行分割符都会返回一次,所以对于分割符连续的情况就束手无策了。
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
using namespace std; void split(const string &s, vector<string> &v, char c) {
stringstream ss;
ss.str(s);
string item;
while (getline(ss, item, c)) {
v.push_back(item);
}
} int main()
{
string line = "asd fasdf fadf fa";
vector<string> strs;
split(line, strs, ' ');
for (auto &s : strs) {
cout << s << endl;
}
return ;
}
6、 输入二维数组,保存到vector矩阵中
例:
输入:[[1,2,3],[4,5,6]]
输出:保存到二维数组矩阵中
//[[1,3,1],[1,5,1],[4,2,1]] -> 保存到二维数组中
vector<vector<int>> stringToIntegerMatrix1(string input)
{
vector<vector<int>> output;
vector<int> temp;
input = input.substr(, input.length() - );
stringstream ss;
ss.str(input);
string item;
char delim = '[';
while (getline(ss, item, delim)) {
item = item.substr(, item.length() - );
temp = stringToIntegerVector(item);
output.push_back(temp);
}
return output;
}
7、获取数组长度
#include<iostream>
#include<stdio.h>
//获取数组的长度
template<typename T>
int count(T& x)
{
int s1 = sizeof(x);
int s2 = sizeof(x[]);
int result = s1 / s2;
return result;
}
1、基本用法
最基本,也是最常用的用法。
//输入数字
int a, b;
cin >> a >> b;
cout << a << '\n' << b << '\n' << endl; //输入abcds,输出 a ,只能获取一个字符
char ch;
ch = cin.get();
cout << ch << endl; char ch1[10];
cin.get(ch1, 5);//输入 abcdefg,输出 abcd,还有一个保存‘\0’
cout << ch1 << endl; //输入字符串,回车结束
string str;
cin >> str;
cout << str << endl;
区别:
(1)cin.get(arrayname,size)当遇到[enter]时会结束目前输入,他不会删除缓冲区中的[enter]
cin.getline(arrayname,size)当遇到[enter]时会结束当前输入,但是会删除缓冲区中的[enter]
/*
输入:12345[enter]
输出:12345 【换行】 10 说明:cin.get(a,10)把12345到a中,
遇到[enter]结束,但是不把[enter]删除,
则把[enter]输入到b中,(enter的ASCALL码为10)
*/
char a[10]; char b;
cin.get(a, 10);
cin.get(b);
cout << a << endl << int(b);
/*
输入:12345[enter]a[enter]
输出:12345【换行】97 说明:cin.getline(a,10)吧12345输入到a中,遇到{enter}结束,
并把缓冲区中[enter]删除,把接下来的a输入到b中
*/
char a[10]; char b;
cin.getline(a, 10);
cin.get(b);
cout << a << endl << int(b);
(2)cin.getline(arrayname,size,s)当遇到s时会结束输入,并把s从缓冲区中删除
cin.get(arrayname,size,s)当遇到s时会结束输入,但不会删除缓冲区中的s
/*
输入:12345,[enter]
输出:12345【换行】 , 说明:cin,get不会删除缓冲区的,
*/
char a[10]; char b;
cin.get(a, 10, ',');
cin.get(b);
cout << a << endl << b;
/*
输入:12345,[enter]
输出:12345【换行】10 说明:cin.getline吧12345输入到a中,遇到’,
‘结束,并删除缓冲区的’,‘,后面的[enter]输入到b中
*/
char a[10]; char b;
cin.getline(a, 10, ',');
cin.get(b);
cout << a << endl << int(b);
应用举例:输入五个学生的名字,每个学生的名字不超过10个字符,输入时学生名字之间用逗号隔开,把这五个名字存储并换行输出
char a[5][10];
int i;
for(i=0;i<4;i++)
cin.getline(a[i],10,',');
cin.getline(a[i],10); for(i=0;i<5;i++)
cout<<a[i]<<endl;
C++(六)— 输入方式的更多相关文章
- Unity 为NGUI增加体感输入方式
背景 NGUI在处理UI和输入方面确实做的不错,但是现在的问题是公司引入体感之后,是通过手的位置来实现按钮的点击操作,前提我不想改变原先设计好的NGUI界面和机制,怎么破? NGUI的输入底层机制 N ...
- 通过输入方式在Android上进行微博OAuth登录
在微博认证方式里,基本的OAuth认证是必须要调整到跳转到第三方页面上进行授权的,例如下面的例子: 1.从http://open.weibo.com/wiki/index.php/SDK#An ...
- python中的三种输入方式
python中的三种输入方式 python2.X python2.x中以下三个函数都支持: raw_input() input() sys.stdin.readline() raw_input( )将 ...
- 设置MaskedTextBox控件的格式,掩码方式检验输入方式
#region 设置MaskedTextBox控件的格式,掩码方式检验输入方式 /// <summary> /// 将MaskedTextBox控件的格式设为yyyy-mm-dd格式. / ...
- C语言中的输入方式
在c语言中,有gets().scanf().getchar()等输入方式,但是不同的方式处理的方式不同. scanf()读取时遇见tab.space.enter时会结束读取,不会舍弃最后的回车符(即回 ...
- Java的输入方式总结
写java代码的时候,经常会遇到的情况就是输入输错了怎么办?大部分想的是用一个if判断,但是用if判断的话我们就无法让用户再次输入,因为if语句程序执行后就会直接退出程序.因此要想实现循环就要用whi ...
- 输入框三种输入方式(selenium webdriver 干货)
在机票预定的页面,输入出发城市和到达城市输入框的时候, 发现直接使用sendkeys不好使, 大部分情况出现输入某城市后没有输入进去, 经过几天的研究,发现可以采取三种方式: 1. 先点击输入框,待弹 ...
- 去哪儿网输入框三种输入方式(selenium webdriver 干货)
在机票预定的页面,输入出发城市和到达城市输入框的时候, 发现直接使用sendkeys不好使, 大部分情况出现输入某城市后没有输入进去, 经过几天的研究,发现可以采取三种方式: 1. 先点击输入框,待弹 ...
- Cordova - Windows版本图形界面管理工具,告别命令行输入方式!
Cordova本身提供的是命令行管理工具,并没有提供图形界面管理工具,虽然命令行管理工具可以完成所有Cordova管理,但是对于我这种懒蛋,可真不希望每次都输入命令,而且我更担心一旦输错一个字符,命令 ...
随机推荐
- 史上最全的CSS hack方式一览(转)
做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我们会极不情愿的使用这个不太友好的方式来达到大家要求的页面表现.我个人是不太推荐使用hack的,要知道 ...
- JSP HTTP 状态码
JSP HTTP 状态码 HTTP请求与HTTP响应的格式相近,都有着如下结构: 以状态行+CRLF(回车换行)开始 零行或多行头模块+CRLF 一个空行,比如CRLF 可选的消息体比如文件,查询数据 ...
- .net 字符串驻留
.net中的string表达的是常量字符串. JIT编译器编译时判断遇到的常量字符串是否在内部散列表中,如果不在,添加进去.当第一次执行到含字符串的方法时,CLR会检查该字符串是否在内部的一个散列表中 ...
- Unity5 怎样做资源管理和增量更新
工具 Unity 中的资源来源有三个途径:一个是Unity自己主动打包资源.一个是Resources.一个是AssetBundle. Unity自己主动打包资源是指在Unity场景中直接使用到的资源会 ...
- python爬虫学习研究
目标:做一个小爬虫项目 2017年6月4日13:32:17 mooc网教程Python爬虫入门一之综述要学习Python爬虫,我们要学习的共有以下几点:Python基础知识Python中u ...
- js滚动到指定位置显示或隐藏元素
$(function(){ $(window).scroll(function(){ var scroll_top=$(window).scrollTop(); console.log(scroll_ ...
- 【python】-- 面向对象引子、概念
面向过程编程 1.编程范式 编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马 ...
- Jquery遍历table并拿到每个单元格里的值
$('#table_id tr').each(function(i){ alert(i); if(i!=0){ //td内的文本 var v0 = $(this).children('td').eq( ...
- Android Studio 1.1 使用介绍及导入 jar 包和第三方依赖库
导入 jar 包 导入 jar 包的方式非常简单,就是在项目中的 libs 中放入你需要导入的 jar 包,然后右键你的 jar 文件,选择“add as a library”即可在你的项目中使用这个 ...
- VS2015 下载 破解
Visual Studio Professional 2015简体中文版(专业版): http://download.microsoft.com/download/B/8/9/B898E46E-CBA ...