我想将一个字符串转换为整数,而不是ASCII码。
简单来说,我们会得到一个字符串方程。我们需要将其分解,正确格式化并解决线性方程。但是,我无法将字符串转换为整数。
我知道这个字符串的格式将是(-5)或(25)等,因此它一定是整数。但是如何从一个字符串中提取出它呢?
我考虑的一个方法是通过字符串运行for / while循环,检查数字,提取其后的所有数字,然后查看是否有前导'-',如果有,则将整数乘以-1。
但对于这样一个小问题来说,似乎有点过于复杂了。你们有什么好主意吗?
long long toll(string a) {
long long ret = 0;
bool minus = false;
for (auto i : a) {
if (i == '-') {
minus = true;
continue;
}
ret *= 10;
ret += i-'0';
}
if (minus)
ret *= -1;
return ret;
}
使用方法:
long long a = toll(string("-1234"));
错误处理未完成
int myatoti(string ip)
{
int ret = 0;
int sign = 1;
if (ip[0] == '-')
{
ip.erase(0, 1);
sign = -1;
}
int p = 0;
for (auto it = ip.rbegin(); it != ip.rend(); it++)
{
int val = *it - 48;
int hun = 1;
for (int k = 0; k < p; k++)
{
hun *= 10;
}
ret += val * hun;
p++;
}
return ret * sign;
}
还有一种简单的方法:假设您有一个字符,如c='4'
,因此您可以执行以下步骤之一:
第一步:int q
q=(int) c; (q现在是ascii表中的52)。
q=q-48;请记住,将48添加到数字上是它们的ascii代码。
第二种方式:
q=c-'0'; 相同,字符'0'表示48
string
转换为 int
,而不是从 char
转换为 string
。 - Yuchen我认为将int
转换为std::string
或反之亦然需要一些特殊的函数,例如std::stoi()
,
但如果您需要将double
转换为string
,请使用to_string()
(不是C#。C#是.ToString()而不是to_string())
std::stoi
已经在许多其他答案中提到,而问题也没有询问如何将 double 转换为字符串。 - cigienlong n = strtol(s.c_str(), NULL, base);
。s
是字符串,base
是一个整数,如2、8、10、16。)strtol
的详细信息。
cstdlib
中的strtol
函数。strtol
仅处理char
数组,因此我们需要将string
转换为char
数组。您可以参考这个链接。#include <iostream>
#include <string> // string type
#include <bitset> // bitset type used in the output
int main(){
s = "1111000001011010";
long t = strtol(s.c_str(), NULL, 2); // 2 is the base which parse the string
cout << s << endl;
cout << t << endl;
cout << hex << t << endl;
cout << bitset<16> (t) << endl;
return 0;
}
这将输出:
1111000001011010
61530
f05a
1111000001011010
如果你不喜欢硬编码 :)
bool strCanBeInt(std::string string){
for (char n : string) {
if (n != '0' && n != '1' && n != '2' && n != '3' && n != '4' && n != '5'
&& n != '6' && n != '7' && n != '8' && n != '9') {
return false;
}
}
return true;
}
int strToInt(std::string string) {
int integer = 0;
int numInt;
for (char n : string) {
if(n == '0') numInt = 0;
if(n == '1') numInt = 1;
if(n == '2') numInt = 2;
if(n == '3') numInt = 3;
if(n == '4') numInt = 4;
if(n == '5') numInt = 5;
if(n == '6') numInt = 6;
if(n == '7') numInt = 7;
if(n == '8') numInt = 8;
if(n == '9') numInt = 9;
if (integer){
integer *= 10;
}
integer += numInt;
}
return integer;
}
atoi
非常相似,不确定为什么要手写。此外,一些东西可以改进:不要按值传递字符串,更多地使用标准函数(第一个函数可以使用类似于std::all_of
+ std::isdigit
的内容进行重写)。 - HolyBlackCatstrCanBeInt
并直接使用<ctype.h>
中的isdigit
函数。只需要使用n-'0'
代替那个冗长的if
系列即可。 - user16217248
atoi()
函数吗? - i_am_jorfint atoi (const char* str);
功能:将参数str
所指向的字符串转换为一个整数(类型为int
)。返回值:如果转换成功,则返回该整数,否则返回零。注意事项:int
类型的范围,则返回INT_MAX
或INT_MIN
,具体取决于转换结果的符号。/* atoi examples */ #include /* printf */
#include /* atoi */
int main ()
{
int i;
char buffer[256];
printf ("Enter a number: ");
fgets (buffer, 256, stdin);
i = atoi (buffer);
printf ("The value entered is %d. Its double is %d.\n",i,i*2);
return 0;
}
- i_am_jorfmyString
的std::string
,而想要使用atoi
函数,则需要输入atoi(myString.c_str())
。 - Robᵩ