将字符串"A10"分解为字符'A'和整数10。

3

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

我的想法如下:

我可以轻松地获取字符,如下所示:

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

抓取后面的一到两位数字似乎是比较困难的部分。

1
实际上不是,信不信由你。我正在练习编写战舰游戏程序,需要获取单元格的索引。例如:"A1" - "J10"。 - draenen
3个回答

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.

我没有尝试过,但是你应该能够这样做 ss >> c >> i; 吧? - Zan Lynx
我也会使用输入运算符来获取字符:std::istringstream ss("A10"); char c; int i; ss >> c >> i; 这种方法可以保持提取的一致性。(@Zan Lynx比我更快,但我实际上是第一个尝试的!) - JonM

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",上述方法也可以使用。这是因为如果substr的第二个参数使子字符串跨越了字符串内容的末尾,那么只有直到字符串末尾的字符会被使用。


2

Using 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 */

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接