首先我们来看cin的用法:cin每次遇到空格或者换行符都会当成一个独立的输入。
如果要求获取输入的如下文本:
C++ Code
1
2 3 |
2
8
123456 12 |
使用getline的好处是在于无论一行里面有无空格都会直接读取一行的数据。
C++ Code
1
2 3 4 5 6 7 8 9 10 11 |
cin >> colomns;
cin >> len; cin.get(); //必须使用要阻断'/n'对下面getline的影响 string str = ""; vector<string> svec; for( int i = 0; i < colomns; i++) { getline(cin, str); //读取一行字符 svec.push_back(str); str = ""; } |
假如有空格的话,只能读取一行了。
C++ Code
1
2 3 4 5 6 7 8 9 10 |
cin >> colomns;
cin >> len; string str = ""; vector<string> svec; for( int i = 0; i < colomns; i++) { cin >> str; //读取字符串,不含空格 svec.push_back(str); str = ""; } |
除了读取字符串之外,我们常常也需要分割字符串。 下面是使用string类的find和substring来实现字符串的分割。
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
void split(string str, string del, vector<string> &ret)
{ int start = 0; int index; string sub; do { index = str.find_first_of(del, start); //使用find查找 if(index != string::npos) { sub = str.substr(start, index - start); //截取字符串 ret.push_back(sub); start = str.find_first_not_of(del, index); //重新定位 if(start == string::npos) // return; /* string 类提供了 6 种查找函数,每种函数以不同形式的 find 命名。 这些操作全都返回 string::size_type 类型的值,以下标形式标记查找匹配所发生的位置; 或者返回一个名为 string::npos 的特殊值,说明查找没有匹配。 */ } } while(index != string::npos); sub = str.substr(start); ret.push_back(sub); } |
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void spilt2(string str, string del, vector<string> &ret)
{ const char *seps = del.c_str(); char *token; token = strtok( ( char *)str.c_str(), seps); string tmp ; while( token != NULL ) {
tmp = token;
ret.push_back(tmp); token = strtok( NULL, seps); } } |
我们需要将字符串转换成整形的时候,我们可以直接采用atoi来将字符串转换成整数。