将数字从字符串转换为整数而不使用内置函数

时间:2011-03-13 15:55:07

标签: c++

我正在尝试这种技术,但错误即将来临。请帮我将数字从字符串转换为整数。

#include<iostream>
using namespace std;

int main()
{
    char *buffer[80];
    int a;

    cout<<"enter the number";
    cin.get(buffer,79);

    char *ptr[80] = &buffer;
    while(*ptr!='\0')
    {
        a=(a*10)+(*ptr-48);
    }
    cout<<"the value"<<a;

    delete ptr[];

    return 0;
}

错误是:

  1. 错误C2440:'初始化':无法从'char )[80]'转换为'char * [80]'
  2. 错误C2440:'=':无法从'char *'转换为'int'

3 个答案:

答案 0 :(得分:5)

当您将变量定义为“char * buffer [80]”时,实际上是在创建一个包含80个char指针的数组,而不是大小为80的数组。此外,您不应删除任何未使用new分配的数组(或删除[]未使用new []分配的任何内容,在这种情况下)。

编辑:另一件事,你实际上并没有推进ptr,所以你总是会看第一个角色。

答案 1 :(得分:3)

正如@Tal所提到的,您正在创建char*的缓冲区,但您将它们视为char的缓冲区。但是,推荐的C ++方法根本不使用原始缓冲区:

#include<iostream>
#include <string>
using namespace std;

int main()
{
    string buffer;
    int a = 0;

    cout<<"enter the number";
    cin >> buffer;

    for(string::iterator it = buffer.begin(); it != buffer.end(); ++it)
    {
        a=(a*10) + (*it-48);
    }
    cout<<"the value"<<a;

    return 0;
}

当然,这可以缩短为:

#include<iostream>
using namespace std;

int main()
{
    int a;

    cout<<"enter the number";
    cin >> a;
    cout<<"the value"<<a;
}

但那已经使用了库函数。

编辑:同时修复int a未初始化。这导致你的程序返回垃圾。

答案 2 :(得分:0)

下面将有所帮助。我在项目中使用这种方式。

bool stringToInt(std::string numericString, int *pIntValue)
{
    int dVal = 0;
    if (numericString.empty())
        return false;

    for (auto ch : numericString)
    {
        if (ch >= '0' && ch <= '9')
        {
            dVal = (dVal * 10) + (ch - '0');
        }
        else
        {
            return false;
        }
    }

    *pIntValue = dVal;
    return true;
}

int main()
{
    int num = 0;
    std::string numStr;
    std::cin >> numStr;
    if (!stringToInt(numStr, &num))
        std::cout << "convertionFailed\n";
    return 0;
}