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

Posted

技术标签:

【中文标题】将字符串“A10”拆分为 char \'A\' 和 int 10【英文标题】:Split string "A10" into char 'A' and int 10将字符串“A10”拆分为 char 'A' 和 int 10 【发布时间】:2010-04-30 05:24:26 【问题描述】:

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

到目前为止我的想法:

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

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

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

【问题讨论】:

其实不,信不信由你。我正在构建一个战舰程序进行练习,需要抓取细胞的索引。 “A1” - “J10” 【参考方案1】:
#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; ? 我还会使用输入运算符来获取字符:std::istringstream ss("A10"); char c; int i; ss &gt;&gt; c &gt;&gt; i; 这种方法使提取保持一致。 (@Zan Lynx 击败了我,但实际上我先尝试过!)【参考方案2】:

您可以将operator[]、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

编辑:

如果s="A1",上述方法也适用。这是因为如果substr2nd 参数使子字符串跨越字符串内容的结尾,则仅使用直到字符串结尾的那些字符。

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于将字符串“A10”拆分为 char 'A' 和 int 10的主要内容,如果未能解决你的问题,请参考以下文章

将字符串拆分为C中的字符串数组

C将一个char数组拆分为不同的变量

正则表达式将字符串拆分为 char 但具有最大大小

Android将字符串拆分为数组[重复]

将数组拆分为字符串

C语言中a[i]=(char)(97+i)啥意思?