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管理,但是对于我这种懒蛋,可真不希望每次都输入命令,而且我更担心一旦输错一个字符,命令 ...
随机推荐
- JavaScript_DOM编程艺术第二版[阅]
前两年迫于项目的需要,只是拿来JQuery用到项目中,并没有实质上理解javascript(貌似其他人也是这么干的)~ 随着最近几年,得益于Nodejs, React, Vue等,javascript ...
- CentOS VSCode调试go语言出现:exec: "gcc": executable file not found in PATH
CentOS VSCode调试go语言出现:exec: "gcc": executable file not found in PATH 解决方案: 执行如下命令安装GCC,然后重 ...
- 大海教你学手游2015CocosLua第一季_02场景跳转和用户触摸
: 课程地址:http://ke.qq.com/cgi-bin/courseDetail?course_id=78017 cocos2d-x直播课交流群: 461039382(公布每节课视频和资料) ...
- 【BZOJ2401】陶陶的难题I 欧拉函数+线性筛
[BZOJ2401]陶陶的难题I 题意:求,n<=1000000,T<=100000 题解:直接做是n*sqrt(n)的,显然会TLE,不过这题a和b都是循环到n,那么就可以进行如下的神奇 ...
- 【BZOJ4026】dC Loves Number Theory 分解质因数+主席树
[BZOJ4026]dC Loves Number Theory Description dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源. 给 ...
- [原创]css设置禁止中文换行
white-space: nowrap; 如有需要还可以设置word-break,word-wrap配合.
- android菜鸟学习笔记22----ContentProvider(二)ContentObserver的简单使用
现在有这样一个应用A通过ContentProvider提供自己的数据给其他应用,应用B通过ContentResolver获取应用A中提供的数据,并将其展示在ListView中,而应用C通过Conten ...
- 6.2.1-FactoryBeanRegistrySupport(未全)
FactoryBeanRegistrySupport 的关系图: 添加工厂方式创建类FactoryBean的支持
- inux c编程:记录锁
记录锁的功能:当一个进程正在读或修改文件的某个部分是,它可以阻止其他进程修改同一文件区.对于这个功能阐述我认为有三点要解释的: 记录锁不仅仅可以用来同步不同进程对同一文件的操作,还可以通过对同一文件加 ...
- QT5的exe的发布
直接release的exe文件需要很多dll关联,一个一个找又太麻烦. 其实QT5带有一个 windeployqt 工具 Qt Widgets Application可执行程序发布方式 首先用 QtC ...