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. java.io.IOException: Illegal partition for 67 (-1)

    今天写MapReduce的分区进行排序的功能,自己写了一个Partitioner,然后用的时候就错了 public static class MyPartition extends Partition ...

  2. HDU3351 Seinfeld 【贪心】

    Seinfeld Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  3. PHP里的socket_recv方法解释

    以前一直经为PHP里没有低级的socket帧接收函数,看来是没看仔细,不过那些说明也太少了,(更令人气的里在英文版说明里的例子下有一句话:这个程序不能运行,因为没用listen函数,但在中文版里却没了 ...

  4. ActivityLifecycleCallbacks 如何控制activity的生命周期

    Android开发 - ActivityLifecycleCallbacks使用方法初探 初识 ActivityLifecycleCallbacks 利用ActivityLifecycleCallba ...

  5. unity shader学习笔记(1) shader基础结构以及Properties面板

    首先是shader的基础结构: Shader "Custom/Example { Properties//变量属性面板 { } SubShader { Tags { "Render ...

  6. Python装饰器 计时器记录方法执行性能

    import time def timeit(func): def wrapper(): start = time.clock() func() end =time.clock() print 'us ...

  7. TP框架---thinkphp表单验证

    自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证.验证的代码要写在模型层即Model里面. 数据验证有两种方式: 静态方式:在模型类里面 ...

  8. SpringMVC拦截器实现登录认证

    项目结构如图: 需要的jar:有springMVC配置需要的jar和jstl需要的jar SpringMVC包的作用说明: aopalliance.jar:这个包是AOP联盟的API包,里面包含了针对 ...

  9. nginx学习之反向代理篇(六)

    在本节,你将学会: --如何根据不同的协议,将请求转发到后端服务器: --修改发送到后端服务器的请求头: --以及配置是否buffering从后端服务器返回来的响应. 1. 将请求转发给后端服务器 当 ...

  10. node-sass 安装失败的解决措施[转]

    转自:http://blog.csdn.net/nzb329/article/details/51935236 在编译一个项目的时候,一直报错 后来发现是因为node-sass没有装成功, 最终的解决 ...