c\c++中的数据输入
来源:互联网 发布:淘宝广场舞服装春装 编辑:程序博客网 时间:2024/04/18 04:03
因为从流中读入数据保存到string中,string会遇到空格就停止录入(这是我很久都未解决的问题,今天终于解决了,真的巨开心)。这样当我们输入一行带空格的字符串,就要考虑getline函数,从流中读入一行字符串。
1.以下是输入3行的示例。
#include<iostream>#include<string>using namespace std;int main(){string str[3];for(int j=0;j<3;j++){ getline(cin, str[j]); }}
2 包含其他输入后读入多行字符串
例如一些编程题要求先输入字符串行数,然后再一行一行读入字符串。如果正常顺写编程的话,会发现第一行字符串读入的是空,后续才能正常录入每行字符串。
这是因为第一行输入一个int数据后,换行符并没有被忽略,直接被准备读入第一行字符串的getline俘获。
所以需要在第一行输入一个int数据后,调用cin.ignore()忽略下面的一个流录入,将其抛弃。
#include<iostream>using namespace std;int main(){ int N; cin>>N; cin.ignore(); //取消换行键的读入 string strCinLine[100]; for(int i =0;i<N;i++) getline(cin,strCinLine[i]);}或者给strCinLine动态申请空间,节省空间开销。
#include<iostream>using namespace std;int main(){ int N; cin>>N; cin.ignore(); //取消换行键的读入 string* strCinLine = new string[N]; for(int i =0;i<N;i++) getline(cin,strCinLine[i]); delete []strCinLine; //记得释放动态空间 strCinLine = NULL;}
1.如果是字符串,则只需分割即可。则可用如下代码。
#include <iostream>#include <sstream>#include <vector> using namespace std; int main() { string str = "hello world sperated by spaces\tand\nhuiche"; vector<string> arr; istringstream ss(str); string word; while(ss>>word) { arr.push_back(word); } for(size_t i=0; i<arr.size(); i++) { cout << arr[i] << endl; } return 0;}
2.如果是一串数字的话,则需现将其按空格分开,再将每个分开的字符串化为数字,具体做法如下:(有的编译器可能通不过)(1)字符串转数字:使用sscanf()函数
char str[]="1234321";
int a;
sscanf(str,"%d",&a);
.............
char str[]="123.321";
double a;
sscanf(str,"%lf",&a);
.............
char str[]="AF";
int a;
sscanf(str,"%x",&a); //16进制转换成10进制
另外也可以使用atoi(),atol(),atof().
(2)使用stringstream类
用ostringstream对象写一个字符串,类似于sprintf()
ostringstream s1;
int i = 22;
s1 << "Hello " << i << endl;
string s2 = s1.str();
cout << s2;
用istringstream对象读一个字符串,类似于sscanf()
istringstream stream1;
string string1 = "25";
stream1.str(string1);
int i;
stream1 >> i;
cout << i << endl; // displays 25
(3)C++可以通过 atoi函数把字符转换成数字。
#include <stdlib.h>#include <stdio.h> int main(void){ int n; char *str = "12345"; n = atoi(str); printf("int=%d\n",n); return 0;}
附:
C++从屏幕输入一行以空格分割的数字,存入整型数组(数字个数未知)
方法一:#include<iostream>using namespace std;int main(){ int a[50]; int i = 0; char c; while((c=getchar())!='\n') { if(c!=' ')//把这句判断条件改动 { ungetc(c,stdin); cin>>a[i++]; } } for(int j=0;j<i;j++) { cout<<"a["<<j<<"]:"<<a[j]<<endl; }}
方法二:#include<iostream>using namespace std;int main(){ int a[20]; int i = 0; char c; cin>>a[i++]; while((c=getchar())!='\n') { cin>>a[i++]; } for(int j=0;j<i;j++) { cout<<"a["<<j<<"]:"<<a[j]<<endl; }}
- c\c++中的数据输入
- C语言读取文件中的数据作为输入和输出
- c++:把数据输入文件
- c语言:数据的输入
- C中的获取输入函数
- c、c++中的字符输入
- c、c++中的字符输入
- c语言中的输入函数
- C#中的数据绑定
- C语言中的数据
- C语言(9)--获得缓存区中的输入数据、趣味转义字符
- C语言 使用文件输入/输出数据
- C语言数据的输入与输出
- C语言 使用文件输入/输出数据
- Java 如何像C/C++输入数据
- C/C++输入读取数据函数总结
- C语言数据输入与输出
- EOF,C语言输入多组数据
- CF272C Dima and Staircase(线段树/贪心)
- 学习资源推荐(不定期更新)
- 3494. 【NOIP2013模拟联考13】线段(segment) (2017.9B组)
- MySQL基础教程之存储过程
- Jzoj4614 字符串(待填)
- c\c++中的数据输入
- Android Studio+Appium+Java+Windows环境安装搭建
- JavaScript代码实现选水果
- Unity_版本切换_预编译手段
- 2017/10/7
- 零基础入门深度学习(3)
- 笔记-感知机、超平面
- Mysql——关系数据库之笛卡尔积
- 算法第五周Swap Nodes in Pairs[medium]