如何使用 C++ 将字符串中的字符转换为整数变量

Posted

技术标签:

【中文标题】如何使用 C++ 将字符串中的字符转换为整数变量【英文标题】:How can I convert a character from a string into a integer variable using C++ 【发布时间】:2020-02-13 00:11:54 【问题描述】:
string phone_nb = "173";
char just_one_char = phone_nb[1];
int i_just_one_char = stoi(just_one_char);

我收到以下错误:

no matching function for call to 'stoi'
int i_just_one_char = stoi(just_one_char);

note: candidate function not viable: no known conversion from 'char' to 'const std::__1::string' (aka 'const basic_string<char, char_traits<char>, allocator<char> >') for 1st argument
_LIBCPP_FUNC_VIS int                stoi  (const string& __str, size_t* __idx = 0, int __base = 10);

note: candidate function not viable: no known conversion from 'char' to 'const std::__1::wstring' (aka 'const basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >') for 1st argument
_LIBCPP_FUNC_VIS int                stoi  (const wstring& __str, size_t* __idx = 0, int __base = 10);

【问题讨论】:

【参考方案1】:

你可以试试这样的:

#include <iostream>
#include <string>

int main() 
    std::string phone_nb = "173";
    int i_just_one_char = phone_nb[0] - '0';
    std::cout << i_just_one_char;

这依赖于字符/ASCII 的结构以将字符转换为其等效整数。

上面的代码会输出一个1

【讨论】:

C++ 保证它只支持字符编码,其中数字具有连续且按升序排列的代码。您所拥有的可以使用 ASCII 或任何其他支持的编码。 只要确保第一个char 确实在'0'..'9' 之间,然后再减去'0',否则会得到错误的结果。【参考方案2】:

最简单的代码修复方法是使用 atoi 而不是 stoi 你可以像这样修改你的代码:

string phone_nb = "173";
char just_one_char_str[2];
just_one_char_str[0] = phone_nb[1];
just_one_char_str[1] = '\0';
int i_just_one_char = atoi(just_one_char);

您可以在atoi() here 上阅读更多信息

另类

正如@RemyLebeau 所提到的,也可以使用substr() 函数并获得类似的结果,或者也可以使用@Rietty 的答案

string phone_nb = "173";
string just_one_char = phone_nb.substr(0, 1);
int i_just_one_char = stoi(just_one_char);

【讨论】:

您可以改用string just_one_char = phone_nb.substr(0, 1); int i_just_one_char = stoi(just_one_char);,但这只是矫枉过正。 Rietty 的回答更有效率。 好吧,只要使用phone_nb.c_str() 就可以了。我不认为这是一个糟糕的解决方案 @ranu 将解析整个字符串,而不仅仅是第一个字符,就像 OP 想要的那样。 @RemyLebeau,这很容易解决。这似乎仍然不是一件坏事。 @ranu 要解决此问题,您必须执行 char temp[2]; temp[0] = just_one_char; temp[1] = '\0'; int i = atoi(temp); 之类的操作

以上是关于如何使用 C++ 将字符串中的字符转换为整数变量的主要内容,如果未能解决你的问题,请参考以下文章

如何用js把字符串转化为整型

如何用C++将数字“1”转换成字符“1”?

如何将包含时间的字符串变量转换为 c++ 中的 time_t 类型?

在 C++ 中将字符转换为整数

C++——如何将一个字符串转换为多个整数?

c++字符串如何转化为数字?