Разбейте строку «A10» на символ «A» и int 10 - PullRequest
3 голосов
/ 30 апреля 2010

Учитывая строку, состоящую из одного символа, за которым следует число (одна или две цифры), я хотел бы разбить его на символ и целое число. Какой самый простой способ сделать это?

Пока мои мысли:

Я могу легко схватить персонажа так:

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

Кажется, что трудной частью является захват одного или двухзначного числа, следующего за ним.

Ответы [ 3 ]

17 голосов
/ 30 апреля 2010
#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.
4 голосов
/ 30 апреля 2010

Вы можете использовать оператор [] , substr , c_str и atoi как:

string s = "A10";
char c = s[0]; // c is now 'A'
int n = atoi((s.substr(1,2)).c_str()); // n is now 10

EDIT:

Выше также будет работать, если s="A1". Это связано с тем, что , если аргумент 2nd для substr заставляет подстроку проходить после конца содержимого строки, используются только эти символы до конца строки.

2 голосов
/ 30 апреля 2010

Использование 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 ++ way":

std::string s = "A10";
std::cout << *s.begin() << s.substr(1, s.size()) << std::endl;
/* prints A10 */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...