我在这里绝对疯狂。我已经尝试了一个多小时。如何在不使用atoi
,atol
,isdigit
之类的情况下将字符串转换为数组?
假设我有一个const char *str
和一个int *converted_val
作为参数。
以下是我所拥有的:
const char *c;
for(c = str; (*c != '\0') && isdigit(*c); ++c){
*converted_value = *converted_value*10 + *c - '0';
}
return true;
但是再一次,如果没有isdigit,我就无法做到。而且我不确定如何处理大的字符串(例如:" 10000000000000000")
答案 0 :(得分:3)
isdigit(*c)
代替*c >= '0' && *c <= '9'
:
const char *c;
....
for( c = str; *c != '\0' && *c >= '0' && *c <= '9'; ++c) {
*converted_value = (*c - '0') + *converted_value*10;
}
return true;
请注意,'0'
到'9'
的ASCII符号按升序排列。
您受限于converted_value
的整数数据类型的范围。
答案 1 :(得分:2)
int yetAnotherAtoi(char *str)
{
int res = 0; // Initialize result
// Iterate through all characters of input string and
// update result
for (int i = 0; str[i] != '\0'; ++i) {
if (str[i]> '9' || str[i]<'0')
return -1; # or other error...
res = res*10 + str[i] - '0';
}
// return result.
return res;
}
答案 2 :(得分:2)
变化:
int *converted_val
到
long int *converted_val
为更大的值提供更多空间。您还可以考虑添加代码来检查输入字符串是否会溢出输出变量。
答案 3 :(得分:0)
如果你想在Visual Studio中没有使用函数的字符串到整数,你可以像下面的代码一样:
#include "stdafx.h"
#include<iostream>
#include<string>
#include<conio.h>
using namespace std;
int main()
{
std::string str ;
getline(cin, str);
int a = 0;
for (int i = 0 ; i<str.length(); i++) {
a = (int)(str[i] - 48) + a * 10;
}
cout << a;
_getch();
return 0;
}