2010-10-04 37 views
7

Merhaba Merhaba, birçok kez sorulmuştu, ancak özel soruma yanıt bulamadım. Örneğin 256 içindize tam sayı olarak dönüştürün

Tamam ama 256a değildir:

Ben sadece ondalık sayılar içeren tek bir dize dönüştürmek istiyorum.

Dizgiyi kontrol etmeden yapılabilir mi?

Teşekkür

+2

Konu satırınızda "dizgeyi tamsayıya dönüştür" yazıyor, ancak sorunuzu bir dizeden int dönüşüme dönüştürdüğünüz anlaşılıyor ... ne yapmaya çalışıyorsunuz ?! – EboMike

+1

Bu gönderi belirsiz ve daha fazla noktalama gerektiriyor. Bir örnekle ne demek istediğini açıklar mısın? – JoshD

cevap

14

hatayı Aklıma o opsiyonel kontrol yapar basit yolu şudur:

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

int main() 
{ 
    stringstream sstr; 
    int a = -1; 

    sstr << 256 << 'a'; 
    sstr >> a; 

    if (sstr.failbit) 
    { 
     cout << "Either no character was extracted, or the character can't represent a proper value." << endl; 
    } 
    if (sstr.badbit) 
    { 
     cout << "Error on stream.\n"; 
    } 

    cout << "Extracted number " << a << endl; 

    return 0; 
} 
+0

atoi nedir? – Alcott

+1

Tamamen geçersiz bir dize ile geçerli bir dize ile "0" –

7

C++ yolu, stringstream kullanmak C++ stili: Dizenin geçerli olup olmadığını öğrenmek için basamak sayısını kontrol ediyoruz:

#include <iostream> 
#include <sstream> 
#include <string> 
#include <cmath> 

int main(int argc,char* argv[]) { 

    std::string a("256"); 

    std::istringstream buffer(a); 
    int number; 
    buffer >> number; // OK conversion is done ! 
    // Let's now check if the string was valid ! 
    // Quick way to compute number of digits 
    size_t num_of_digits = (size_t)floor(log10(abs(number))) + 1; 
    if (num_of_digits!=a.length()) { 
     std::cout << "Not a valid string !" << std::endl; 
    } 
    else { 
     std::cout << "Valid conversion to " << number << std::endl; 
    } 

} 
+0

arasına dönüşen bir dizge arasındaki farkı anlatmanın bir yolu sağlanmadığından, ancak "atoi" nin bir hayranı değilim, ancak dize bir tam sayı değilse ne olur? a'nın değeri ne olacak? –

+0

@ Jean-FrançoisFabre: 'sstr.rdstate() 'tarafından döndürülen durumu doğrulayarak ya da tek tek durum değerlerini kontrol ederek akış durumunu kontrol edebilirsiniz. Cevabımı ikinci seçenekle güncelledim. – Donotalo

6

bir başka yolu kullanarak:

char *endptr; 
int x = strtol(str, &endptr, 0); 
int error = (*endptr != '\0'); 
+0

"0", "0001", "-5" için başarısız. – stark

İlgili konular