将字符串转换为 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=192
、int_2=01
和 int_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的主要内容,如果未能解决你的问题,请参考以下文章