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++(六)— 输入方式的更多相关文章

  1. Unity 为NGUI增加体感输入方式

    背景 NGUI在处理UI和输入方面确实做的不错,但是现在的问题是公司引入体感之后,是通过手的位置来实现按钮的点击操作,前提我不想改变原先设计好的NGUI界面和机制,怎么破? NGUI的输入底层机制 N ...

  2. 通过输入方式在Android上进行微博OAuth登录

    在微博认证方式里,基本的OAuth认证是必须要调整到跳转到第三方页面上进行授权的,例如下面的例子:     1.从http://open.weibo.com/wiki/index.php/SDK#An ...

  3. python中的三种输入方式

    python中的三种输入方式 python2.X python2.x中以下三个函数都支持: raw_input() input() sys.stdin.readline() raw_input( )将 ...

  4. 设置MaskedTextBox控件的格式,掩码方式检验输入方式

    #region 设置MaskedTextBox控件的格式,掩码方式检验输入方式 /// <summary> /// 将MaskedTextBox控件的格式设为yyyy-mm-dd格式. / ...

  5. C语言中的输入方式

    在c语言中,有gets().scanf().getchar()等输入方式,但是不同的方式处理的方式不同. scanf()读取时遇见tab.space.enter时会结束读取,不会舍弃最后的回车符(即回 ...

  6. Java的输入方式总结

    写java代码的时候,经常会遇到的情况就是输入输错了怎么办?大部分想的是用一个if判断,但是用if判断的话我们就无法让用户再次输入,因为if语句程序执行后就会直接退出程序.因此要想实现循环就要用whi ...

  7. 输入框三种输入方式(selenium webdriver 干货)

    在机票预定的页面,输入出发城市和到达城市输入框的时候, 发现直接使用sendkeys不好使, 大部分情况出现输入某城市后没有输入进去, 经过几天的研究,发现可以采取三种方式: 1. 先点击输入框,待弹 ...

  8. 去哪儿网输入框三种输入方式(selenium webdriver 干货)

    在机票预定的页面,输入出发城市和到达城市输入框的时候, 发现直接使用sendkeys不好使, 大部分情况出现输入某城市后没有输入进去, 经过几天的研究,发现可以采取三种方式: 1. 先点击输入框,待弹 ...

  9. Cordova - Windows版本图形界面管理工具,告别命令行输入方式!

    Cordova本身提供的是命令行管理工具,并没有提供图形界面管理工具,虽然命令行管理工具可以完成所有Cordova管理,但是对于我这种懒蛋,可真不希望每次都输入命令,而且我更担心一旦输错一个字符,命令 ...

随机推荐

  1. dede 文章列表页如何倒序排列

    {dede:arclist row='6' typeid='18' orderway='asc'} <li>;<a href="[field:arcurl/]"& ...

  2. 微服务网关哪家强?一文看懂Zuul, Nginx, Spring Cloud, Linkerd性能差异

      导语:API Gateway是实现微服务重要的组件之一.面对诸多的开源API Gateway,如何进行选择也是架构师需要关注的焦点.本文作者对几个较大的开源API Gateway进行了压力测试,对 ...

  3. JS中关于闭包和this的指向

    闭包个人理解   函数内部还有一个函数,其作用就是可以访问上一层函数中的变量 下面的案例中函数内部有函数,this的指向就变为window了 结果闭包中this指向的两种方法 1.call对象冒充可以 ...

  4. 安装android Studio和运行react native项目(基础篇)

    ANDROID_HOME环境变量 确保ANDROID_HOME环境变量正确地指向了你安装的Android SDK的路径. 打开控制面板 -> 系统和安全 -> 系统 -> 高级系统设 ...

  5. <转载> 为什么在Python里推荐使用多进程而不是多线程?

    经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢?                要知其然,更要知其所以然.所以有了下面的深入研究: 首先强调背景:     ...

  6. 成功扩展live555支持ipv6,同时支持RTSPServer & RTSPClient

    live555对ipv6的扩展 从live555的官网看live555的发展历史,实在是历史悠久,保守估计已经发展了至少16年以上了,同时,这也导致了live555在很多架构和考虑上面不能满足现代化的 ...

  7. 九度OJ 1343:城际公路网 (最小生成树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:445 解决:178 题目描述: 为了加快城市之间的通行和物资流动速度,A国政府决定在其境内的N个大中型城市之间,增加修建K条公路.已知这N个 ...

  8. 执行后台任务的利器——Hangfire

    Hangfire是一个开源且商业免费使用的工具函数库.可以让你非常容易地在ASP.NET应用(也可以不在ASP.NET应用)中执行多种类型的后台任务,而无需自行定制开发和管理基于Windows Ser ...

  9. 使用memcache进行账号验证服务

    适用环境是需要频繁进行账号和请求合法性验证的地方 大致思路: 1.登陆时,服务器端接收一个账号和密码,还可以再加上用户的ip等信息通过md5等加密算法计算出一个定长的字符串作为用来验证的token 2 ...

  10. Android笔记之自定义的RadioGroup、RadioButton,以及View实例状态的保存与恢复

    效果图 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLay ...