【问题标题】:Convert a number from string to integer without using inbuilt function不使用内置函数将数字从字符串转换为整数
【发布时间】:2023-03-30 07:00:01
【问题描述】:

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

#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”

【问题讨论】:

  • 错误是什么?哪条线路正在生成它?您已经尝试过什么来修复它?
  • @Raja - 如果这是与学校相关的和/或家庭作业,一般建议将其标记为家庭作业(家庭作业 c++)。
  • 您没有将用户输入的整数字符转换为其整数值。
  • @jared Farrish 这不是作业。我正在尝试这个程序将字符串中的数字转换为数字。我正在使用这种技术。但无法编写代码。所以我发布了我的问题在这里
  • @GWW 我想到了使用这个 while(*ptr!='\0') { a=(a*10)+(*ptr-48); } 所以在我的程序中使用

标签: c++


【解决方案1】:

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

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

【讨论】:

  • 好的。我明白了你的意思。但我的程序无法正常工作。我想转换一个不。从字符串到整数。使用 while(*ptr!='\0') { a=(a*10)+(*ptr-48); }
【解决方案2】:

正如@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未初始化。这导致您的程序返回垃圾。

【讨论】:

  • @dark_charlie:那么也可以使用字符串流 :) ... 对我来说似乎是家庭作业。
  • @dark_charlie 答案被接受了。但我想问一点,我不知道使用你在你的即 for(string::iterator it = buffer.begin(); 它!= buffer.end(); ++it) 你会用指针告诉我吗
  • @Raja:迭代器是通用指针——它们的行为(大部分)类似于指针,但使用起来更安全。为简化起见,您可以将循环视为变量 it 是一个指针 (char *),而 buffer.end() 是 '\0'。
  • 不要使用幻数 (48)。使用适当的平台特定常量。 => '0' 这将始终有效。
  • @Raja:您可以使用 cprogramming.com 教程来了解有关这些概念的更多信息。特别是关于标准模板库(STL)的部分:cprogramming.com/tutorial.html#stltutorial。这 (cprogramming.com/tutorial/stl/iterators.html) 是解释迭代器的教程的一部分。
【解决方案3】:

以下内容会有所帮助。我在我的项目中使用这种方式。

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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多