2011-03-13 91 views
1

我正在尝试这种技术,但错误即将到来。请帮我将一个数字从字符串转换为整数。将数字从字符串转换为整数而不使用内置函数

#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:初始化:不能从转换 '字符)[80]' 至 '字符* [80]'
  2. 错误C2440: '=':无法从'char *'转换为'int'
+1

这功课呢? – GWW 2011-03-13 15:55:46

+1

什么是错误?哪一行正在生成它?你已经尝试过什么来修复它? – 2011-03-13 15:58:37

+0

@Raja - 如果这是与学校有关的和/或家庭作业,一般的建议是将其标记为家庭作业(家庭作业C++)。 – 2011-03-13 15:58:50

回答

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未被初始化。这导致你的程序返回垃圾。

+0

@dark_charlie:那么人们也可以使用一个字符串流:) ...似乎对我来说是功课。 – 0xC0000022L 2011-03-13 16:09:15

+0

@ dark_charlie答案已被接受。但我想问一个问题,我不知道如何使用你在其中用过的(string :: iterator it = buffer.begin(); it!= buffer。结束(); ++它)你会告诉我使用指针为我convience – Raja 2011-03-13 16:14:06

+1

@Raja:迭代器是泛化指针 - 他们的行为像指针(主要),但更安全的使用。作为一个简化,你可以将循环看作是变量'it'是一个指针(char *)和buffer.end()是'\ 0'。 – 2011-03-13 16:17:06

5

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

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

+0

+1。对于新/新[];) – 0xC0000022L 2011-03-13 16:03:19

+0

好的重复。我明白了你的意思,但是这个程序不是按我的意思工作的。我想转换一个不。从字符串到整数,即使用while(* ptr!='\ 0'){a =(a * 10)+(* ptr-48); } – Raja 2011-03-13 16:05:03