【问题标题】: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”

标签: c++ c string


【解决方案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[]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",上述方法也适用。这是因为如果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 */
    

    【讨论】:

      猜你喜欢
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      相关资源
      最近更新 更多