Çözüldü Char türü nasıl Int'e çevrilir?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

MertcanKlc

Megapat
Katılım
10 Aralık 2016
Mesajlar
238
Daha fazla  
Cinsiyet
Erkek
Merhaba. Kullanıcıdan GG/AA/YY şeklinde bir tarih girmesini istiyorum. Bu tarihi bir değere atadıktan sonra atadığım değer içerisinden int biçiminde günü, ayı ve yılı çekmek istiyorum.
Tarihi string biçiminde aldıktan sonra dizileri kullanarak örneğin tarih[0] yaparak sayıları char şeklide alıyorum ama bunlar ile matematiksel işlem yapacağım zaman sayının kendisini değil de ASCII tablosundaki değerini alıyor.

Char'ları ınt'e çevirmeye çalışsamda yapamadım. İlk başta tarihi int olarak alsam bu sefer / işaretinden sonrasını almıyor. Ayrıca buna benzer 2 sorum daha var.

1) stringte olduğu gibi int değerlerinde de dizi gibi bir şey var mı? Atıyorum sayı 1500 olsun. Sayı[0] gibi bir şey var mı yani? Varsa açıklar mısınız?

2) tarihte yılı 2023 şeklinde alalım. Dizileri kullanarak yılı 4 haneli şekilde nasıl alabilirim?
Şimdiden teşekkür ederim.
 
Son düzenleyen: Moderatör:
Çözüm
C++ kullanıyorsunuz. Aklınıza gelebilecek neredeyse her şey var.
C++ kullanıyorsunuz diye tekerleği yeniden icat etmenize gerek yok. Tarihin düzgün geldiğinden emin olmak için regex kullanın. Sonrasında değerleri kontrol edersiniz.
Sayıları integer yapmak için de std::stoi() ve std::string.substr() kullanabilirsiniz.
Kod:
#include <iostream>
#include <string>

int main() {
    std::string date;
    std::cout << "tarih gir: ";
    std::cin >> date;
  
    std::cout << std::stoi(date.substr(0, 2)) + 10000 << '\n';
    std::cout << std::stoi(date.substr(3, 5)) + 10000 << '\n';
    std::cout << std::stoi(date.substr(6, 10)) + 10000 << '\n';

    return 0;
}

Tarihi integer olarak alıyorsanız almamanızı tavsiye ederim. Her ne kadar kontrol yapılan bir şey olsa da tarih stringe daha uygun bir şey.
İlla integer olarak alıp basamaklarını kullanacağım diyorsanız yapacağınız işe göre değişir. Normal tarih kontrolü yapacaksanız sayıları kullanın. 1900-2100 aralığında olacaksa gidip ilk iki basamağını kontrol etmeyin. 1900 sayısı ile 2100 sayısı arasında olup olmadığını kontrol edin.
Daha karışık işler yapacağım diyorsanız sayılar 10 basamağında tutulmadığı için çok rahat bir yolu yok. Millet genelde string alıp öyle basamak çekiyor. Sayıyı 10'a bölüp mod 10'unu almak gayet hızlı ve yazması meşakkatli olmayan bir yöntem.
C++ kullanıyorsunuz. Aklınıza gelebilecek neredeyse her şey var.
C++ kullanıyorsunuz diye tekerleği yeniden icat etmenize gerek yok. Tarihin düzgün geldiğinden emin olmak için regex kullanın. Sonrasında değerleri kontrol edersiniz.
Sayıları integer yapmak için de std::stoi() ve std::string.substr() kullanabilirsiniz.
Kod:
#include <iostream>
#include <string>

int main() {
    std::string date;
    std::cout << "tarih gir: ";
    std::cin >> date;
  
    std::cout << std::stoi(date.substr(0, 2)) + 10000 << '\n';
    std::cout << std::stoi(date.substr(3, 5)) + 10000 << '\n';
    std::cout << std::stoi(date.substr(6, 10)) + 10000 << '\n';

    return 0;
}

Tarihi integer olarak alıyorsanız almamanızı tavsiye ederim. Her ne kadar kontrol yapılan bir şey olsa da tarih stringe daha uygun bir şey.
İlla integer olarak alıp basamaklarını kullanacağım diyorsanız yapacağınız işe göre değişir. Normal tarih kontrolü yapacaksanız sayıları kullanın. 1900-2100 aralığında olacaksa gidip ilk iki basamağını kontrol etmeyin. 1900 sayısı ile 2100 sayısı arasında olup olmadığını kontrol edin.
Daha karışık işler yapacağım diyorsanız sayılar 10 basamağında tutulmadığı için çok rahat bir yolu yok. Millet genelde string alıp öyle basamak çekiyor. Sayıyı 10'a bölüp mod 10'unu almak gayet hızlı ve yazması meşakkatli olmayan bir yöntem.
 
Son düzenleme:
Çözüm
Yardımınız için çok teşekkür ederim.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…