【问题标题】:How to split char and digit in c如何在c中拆分字符和数字
【发布时间】:2016-02-25 19:50:00
【问题描述】:

输入(字符串):E2

输出:

字符是E

数量是2

我怎样才能得到它? 谢谢

我使用 strtol,但它仅适用于第一个字符为 num 如果我的输入是 2E,它可以工作,但如果它是 E2,那么失败。

int main()
{
    char str[30] = "2E";
    char *ptr;
    long ret;

    ret = strtol(str, &ptr, 10);
    printf("The number(unsigned long integer) is %ld\n", ret);
    printf("String part is %s", ptr);

    return(0);
}

我想要的是,如果我输入 E2,ret 是 2,ptr 是 E

【问题讨论】:

  • 请更具体地说明您希望允许的输入:您在解析棋盘位置吗?十六进制数?单个字母和单个十进制数字的任何组合?
  • @MOeh 第一个字符是单个字母,第二个是十进制数。
  • 如果str 包含"E2",您希望在ret 中得到什么?你写“然后失败”。它是如何失败的??
  • @MichaelWalz 上面的代码有效。但是如果我的输入是E2,那么它会得到“”数字(无符号长整数)是0,“字符串部分是E2。”
  • @MichaelWalz 我输入 E2 时出现异常,ret 为 2,ptr 为 E

标签: c string split


【解决方案1】:

你可以使用sscanf:

char c;
int i;
if (sscanf(input, "%c%d", &c, &i) == 2) /* make sure 2 objects were read */
    printf("The char is %c and the int is %d\n", c, i);

【讨论】:

    【解决方案2】:

    这应该可行:

    int main()
    {
        char str[30] = "E2";
        char ptr[2];
        long ret;
    
        ptr[0] = str[0];
        ptr[1] = '\0';
        ret = strtol(str + 1, NULL, 10);
    
        printf("The number(unsigned long integer) is %ld\n", ret);
        printf("String part is %s", ptr);
    
        return(0);
    }
    

    【讨论】:

    • 不过,stackptr 的解决方案可能是更好的选择。
    猜你喜欢
    • 1970-01-01
    • 2020-03-19
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2020-11-29
    相关资源
    最近更新 更多