将字符串“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 >> c >> 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"
,上述方法也适用。这是因为如果substr
的2nd
参数使子字符串跨越字符串内容的结尾,则仅使用直到字符串结尾的那些字符。
【讨论】:
【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章