Nasıl bir dize C ile bir sayı olup olmadığını belirlemek için ?
Bir sürü bela bir dize olmadığını denetler bir numara olduğunu bir fonksiyon yazmaya çalışarak geçirdim. Eğer okuyorum dosyasından bir satır numarası olup olmadığını ben yazıyorum bir oyun için kontrol etmeniz gerekir (Eğer bir parametre ise bu şekilde bilemeyeceğim). Sorunsuz çalışıyordu sanırım aşağıdaki gibi bir fonksiyon (ya da ben yanlışlıkla bunu durdurmak için düzenlenmiş ya da şizofren olduğumu ya da Windows şizofren) yazdı:
bool isParam(string line){
if(isdigit(atoi(line.c_str()))) return true;
return false;
}
CEVAP
En etkili yolu sadece rakam olmayan bir karakter bulana kadar dize üzerinde yineleme olacaktır. Eğer rakam olmayan herhangi bir karakter varsa, bir dize, bir sayı değil düşünebilirsiniz.
bool is_number(const std::string& s)
{
std::string::const_iterator it = s.begin();
while (it != s.end() && std::isdigit(*it)) it;
return !s.empty() && it == s.end();
}
Ya da eğer C 11 gibi yapmak istiyorsanız:
bool is_number(const std::string& s)
{
return !s.empty() && std::find_if(s.begin(),
s.end(), [](char c) { return !std::isdigit(c); }) == s.end();
}
Aşağıdaki yorum da belirttiği gibi, bu sadece pozitif tamsayılar için de çalışır. Eğer negatif tam sayı ya da kesir tespit etmek gerekirse, daha sağlam kütüphane tabanlı bir çözüm ile gitmeli. Negatif tamsayılar için destek ekleyerek rağmen oldukça saçmadır.
Nasıl bir dize C ile bir sayı olup olm...
Nasıl bir sayı olup olmadığını belirle...
Nasıl pozitif veya negatif bir sayı ol...
Nasıl bir dize bir sayı (yüzen) olup o...
Nasıl değişken olup olmadığını belirle...