2013-07-04 42 views
0

我試圖從用戶輸入一個數字(如12345)並將其變爲int。我使用的代碼是:將多位數字的字符數轉換爲int

int convertToNumber(char a[10]) { 
    int output = 0; 
    int b; 
    int intArray[10]; 
    //Finds length 
    for (int i = 0; a[i]!=0; i++) { 
     if (a[i]==0) { 
      b=i-1; 
     } 
    } 
    //Runs through every letter. 
    for (int i = 0; a[i]!=0; i++) { 
     //Checks if user inputted anything but letter 
     intArray[i] = a[i] - '0'; 
     //Multiplying it by the distance from the end 
     intArray[i]= intArray[i] * (10^(b-i)); 
     //Adds to output 
     output=+intArray[i]; 

    } 
    return output; 
} 

但是,這並不會像我希望的那樣結束。任何人都知道什麼是錯的?

+0

^在C/C++中沒有功能,這是按位異或。也許這是你錯誤的根源。 – eran

+0

x ** y是y的權力x? –

+2

@huseyintugrulbuyukisik在Python中,當然。不在C++中。 C++中沒有操作符用於執行功能。 – 2013-07-04 22:29:46

回答

2

您需要在C++中對操作符進行介紹。 10^(b-i)不是10到(b-i)次方,它是10 XOR b-i。另外,爲了找到長度,請不要滾動您自己的功能,請使用std::strlen()

但是你不需要一個明確的長度:隨着你沿着字符串去積累產品。

int my_str2int(const char *s) 
{ 
    int res = 0; 
    while (*s) { 
     res *= 10; 
     res += *s++ - '0'; 
    } 

    return res; 
} 

而且,我只注意到標題:

我想輸入數字從用戶(如12345),並把它變成一個int

如果是這樣的所有你想要的:

long l = std::strtol("12345", NULL, 0); 
unsigned long ul = std::strtoul("12345", NULL, 0); 
long long ll = std::strtoll("12345", NULL, 0); 
unsigned long long ull = std::strtoull("12345", NULL, 0); 
int i = std::atoi("12345"); 

通常,the docs ain't evil

+0

不,12345只是一個例子,你剛剛使用的代碼不起作用。 – dunnmifflsys

+0

@newbie嗯,我不遵循? – 2013-07-04 22:37:57

+0

哦,我以爲你的意思是「12345」是我唯一想用的東西。 – dunnmifflsys

0

您可以嘗試避免在這裏重新發明輪子。查看strtoulstrtoull以查看它們是否可用於您的系統。這些處理不同基數的數字,如果您的字符串包含數字和非數字的混合,則會給您一個指向第一個非數字的指針。

而且,正如其他人所指出的,^執行按位XOR。

+0

很確定這是一個家庭作業問題,所以不能這樣做。 – SamFisher83

+0

如果是這樣的話,我沒有進一步回答。 :-)而且,看起來H2CO3反正給出了一個非常合理的「atoi」。 –

+0

不,這不是家庭作業,我從來沒有聽說過這些,當我早些時候在網上搜索時他們沒有出現。 – dunnmifflsys

0

你想在數學庫中使用pow函數。 ^做xor。

+0

是的,'pow'就是你如何去求冪。不,這不是需要的。重複的乘法和加法更加自然地適合輸入數據,並且更快。 –