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管理,但是对于我这种懒蛋,可真不希望每次都输入命令,而且我更担心一旦输错一个字符,命令 ...
随机推荐
- centos 6.9使用Rsync+Inotify-tools实现数据实时同步
centos 6.9使用Rsync+Inotify-tools实现数据实时同步 说明: 操作系统:CentOS 6.9 源服务器:192.168.1.222 备份服务器:192.168.1.1.233 ...
- 07 在Windows下编译Memcached
一:windows下编译Memcached (1)下载地址dll:http://down.51cto.com/data/442606 (2)在php下输出 echo phpinfo():查看php的版 ...
- linux上安装Kafka
写个一篇kafka文章了.但是那都是针对性能来说的,下面看一下完整的,kafka步骤: 安装单机三个 Broker 的 Kafka 集群,使用 Kafka 集群发布和接收消息.学完本课程,对 Kafk ...
- UFLDL深度学习笔记 (四)用于分类的深度网络
UFLDL深度学习笔记 (四)用于分类的深度网络 1. 主要思路 本文要讨论的"UFLDL 建立分类用深度网络"基本原理基于前2节的softmax回归和 无监督特征学习,区别在于使 ...
- Node-Webkit - package.json - 参数设置
必填: main :(string)APP的主入口,指定一个html文件,如:main:"index.htm". name :(string)APP的名称,必须具有唯一性. 例子: ...
- html 自动跳转,meat(http-equiv)标签详解
http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变 ...
- WebApi 中使用 Token
1.登陆的时候根据用户信息生成Token var token = FormsAuthentication.Encrypt( new FormsAuthenticationTicket( , " ...
- config相关操作(转)
转自:http://www.cnblogs.com/kissdodog/archive/2013/04/16/3025315.html,这是一个专题,感觉比较好,有空可以看与一下 System.Con ...
- BZOJ1505: [NOI2004]小H的小屋
BZOJ1505: [NOI2004]小H的小屋 Description 小H发誓要做21世纪最伟大的数学家.他认为,做数学家与做歌星一样,第一步要作好包装,不然本事再大也推不出去. 为此他决定先在自 ...
- Eclipse +Tomcat配置-【菜鸟学JAVA】
说起来也惭愧,以前用(Unieap)工具搞了一年多的JAVA+Oracle,现在居然在Eclipse中配置tomcat都搞了半天时间,原来一直是做.NET的. 今天开始不再用集成的环境,话不多说,开始 ...