2011-03-13 55 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