将字符串转换为 int 和 char

Posted

技术标签:

【中文标题】将字符串转换为 int 和 char【英文标题】:Convert string into int and char 【发布时间】:2019-08-13 17:22:43 【问题描述】:

如何在 C++ 中将字符串转换为具有固定位置数的 int 和 char? 例如:我需要将“A1920139”转换为字符“A”、int 192(字符串中的后三个位置)、int 01(后两个位置)和 int 39(最后两个位置)。

到目前为止,我只设法自己获取每个 int(1、9、2、0 等)。我不知道如何获取 char 或为 int 定义固定数量的位置。这是我设法写的:

string userstr;
int* myarray = new int[sizeof(userstr)];

userstr = "A1920139";

for (i = 1; i < userstr.size(); i++) 
   myarray[i] = userstr[i] - '0';


for (i = 1; i < userstr.size(); i++) 
   printf("Number %d: %d\n", i, myarray[i]);

最终我需要达到char="A"int_1=192int_2=01int_3=39 之类的东西

【问题讨论】:

int* myarray = new int[sizeof(userstr)]; - 为什么手动内存管理 (new) 而不是使用容器或(至少)智能指针? ***.com/questions/12119645/… 的重复我无法关闭,因为我已经不小心关闭了错误的链接。这是关于new int[sizeof(userstr)];。但由于 OP 后来使用了.size(),所以可能只是笔误。 不过,第二个问题似乎比这更广泛。 OP 正在尝试将字符串分组为一批数字,并且可能尚未注意到未定义行为的影响。副本仅解决了代码的问题,但不是所要求的。 另外注意:即使你改成int* myarray = new int[userstr.size()];,此时userstr的大小也会为零。它还没有被分配任何东西。 ` 我的问题如何与链接中的问题重复?我在该链接中没有看到我的问题的答案 - 它仅与获取字符串的大小有关? 【参考方案1】:

如果我理解正确,您想在固定位置解析字符串,在这种情况下,您可以像这样使用substr()stoi()

std::string userstr = "A1920139";
int myarray[3];

myarray[0] = std::stoi(userstr.substr(1, 3));
myarray[1] = std::stoi(userstr.substr(4, 2));
myarray[2] = std::stoi(userstr.substr(6, 2));

std::cout << "int_1=" << myarray[0] << ", int_2=" << myarray[1] << ", int_3=" << myarray[2] << std::endl;

【讨论】:

【参考方案2】:

substr(pos, len) 将得到一个从位置pos 开始,长度为len 的子字符串。

stoi 会将字符串转换为整数。

#include <string>
#include <iostream>

int main()

    std::string userstr = "A1920139";

    char c = userstr[0];
    int n1 = std::stoi(userstr.substr(1, 3));
    int n2 = std::stoi(userstr.substr(4, 2));
    int n3 = std::stoi(userstr.substr(6, 2));

    std::cout << c << ' ' << n1 << ' ' << n2 << ' ' << n3 << std::endl;

【讨论】:

以上是关于将字符串转换为 int 和 char的主要内容,如果未能解决你的问题,请参考以下文章

char *怎样转成int

如何将char类型转换成int类型?

如何将char*转换为wchar

将十六进制字符串(char [])转换为int?

使用 char 数组将字符串转换为 int

C++ 将 int 和 string 转换为 char*