将字符串“A10”拆分为char'A'和int 10

时间:2010-04-30 05:24:26

标签: c++ c string

给定一个由单个字符后跟一个数字(一个或两个数字)组成的字符串,我想将其拆分为一个字符和一个整数。最简单的方法是什么?

到目前为止我的想法:

我可以像这样轻松抓住角色:

string mystring = "A10";
char mychar = mystring[0];

困难的部分似乎抓住了后面的一位或两位数字。

3 个答案:

答案 0 :(得分:17)

#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.

答案 1 :(得分:4)

您可以使用operator[]substrc_stratoi作为:

string 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",上述内容也会有效。这是因为如果2nd的{​​{1}}参数使得子字符串跨越字符串内容的末尾,则只使用字符串结尾之前的那些字符。 < / p>

答案 2 :(得分:2)

使用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 */