给定一个由单个字符和一个数字(一位或两位)组成的字符串,我想将它分成一个字符和一个整数。最简单的方法是什么?
我的想法如下:
我可以轻松地获取字符,如下所示:
string mystring = "A10";
char mychar = mystring[0];
抓取后面的一到两位数字似乎是比较困难的部分。
#include <sstream>
char c;
int i;
std::istringstream ss("A10");
ss >> c >> i;//First reads char, then number.
//Number can have any number of digits.
//So your J1 or G7 will work either.
std::istringstream ss("A10"); char c; int i; ss >> c >> i;
这种方法可以保持提取的一致性。(@Zan Lynx比我更快,但我实际上是第一个尝试的!) - JonMstring s = "A10";
char c = s[0]; // c is now 'A'
int n = atoi((s.substr(1,2)).c_str()); // n is now 10
编辑:
如果s="A1"
,上述方法也可以使用。这是因为如果substr
的第二个参数使子字符串跨越了字符串内容的末尾,那么只有直到字符串末尾的字符会被使用。
sscanf()
std::string s = "A10";
int i;
char c;
sscanf(s.c_str(), "%c%d", &c, &i);
/* c and i now contain A and 10 */
这更像是一种“C方式”处理问题,但仍然有效。
以下是更符合“C++方式”的做法:
std::string s = "A10";
std::cout << *s.begin() << s.substr(1, s.size()) << std::endl;
/* prints A10 */