2 Soru: Şu anda int dizisindeki bir tam sayı kümesini, dizeyi sayılara yeniden tanımlayarak ve ardından dizide depolamaya çalışıyorum

tarafından oluşturulan soru Wed, May 8, 2019 12:00 AM

Herhangi bir karakter içerecek olan giriş metnini /sayıları (dize) dönüştürmeye çalışıyorum, ancak sayıları karakterlerden ayırmak ve bunları bir dizeden dönüştürüldüğünde tam sayı dizisine depolamak istiyorum. p>

Sorunun, dizenin stoi() kullanarak bir tam sayıya dönüştüğü yer olduğuna inanıyorum, ancak sorunu tespit edemiyorum.

Şu anda, kod herhangi bir girişi kabul eder ve bir dizgeye dönüştürür, dize sonra karakter karakter kontrol edilir ve virgül veya boşlukla ayrılmadan tüm sayılar birlikte, virgül veya boşluk veya başka bir karakter eklendiğinde birlikte eklenir sayıyı ayırır, sayı bir bütün olarak diziye eklenir ve ardından dize daha fazla sayı olup olmadığını denetlemeye devam eder.

Herhangi bir fikrin var mı? Giriş Örneği1: 12, 13, 15     Giriş Örneği2: 12 13 15         Girdi Örneği3: 12ab13cd15ef

Tamsayı dizisindeki sonuç: 0 [12] 1 [13] 2 [15] Bu numaralar, dizideki sayıları kullanarak, belirli bir sırada kullanılacaktır.

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

int main()
{
    string datainput, str1, str3;
    cin >> datainput;
    int n = 0, raycount = 0, c;
    int myray[10];
    while (datainput[n])
    {
        if (datainput[n] == ('0') || datainput[n] == ('1') || datainput[n] == ('2') || datainput[n] == ('3') || datainput[n] == ('4') ||
            datainput[n] == ('5') || datainput[n] == ('6') || datainput[n] == ('7') || datainput[n] == ('8') || datainput[n] == ('9'))
        {
            str1 = datainput[n];
            str3 += str1;
        }
        else
        {
            c= stoi(str3);
            c >> myray[raycount];
            raycount++;
        }
        n++;
    }
    cout << myray[0] << endl;
    cout << myray[1] << endl;
    cout << myray[2] << endl;
    cout << myray[3] << endl;
    system("pause");
    return 0;
}
    
0
2 Yanıtlar                              2                         

Kodunuzla ilgili birkaç sorun gördüm.

  • C ++ 11'den önce, while (datainput[n]), tanımsız davranışa sahiptir , n, dizenin sonuna ulaştığında

  • Sayısal rakamları denetleme yönteminiz 060035099111110101035062 veya std::isdigit() ve 0600350991111101035062 operatörlerini kullanarak yalnızca basit bir aralık denetimi kullanarak büyük ölçüde basitleştirilebilir.

  • Diğer karakterlerle ayrılmış sayıları veya dizedeki son sayı dizenin en sonunda olduğunda doğru şekilde hesap oluşturmuyorsunuz.

  • Bunun yerine 06003509911111100101035062 ifadesinin >= olarak değiştirilmesi gerekiyor. Ve eğer 06003509911110000101035062, <=’nin maksimum kapasitesine ulaşırsa, döngüsünüzü kırmayacaksınız.

  • 06003509911111100101035062, c >> myray[raycount]; ile dönüştürüldükten sonra boş bir dizeye geri dönmüyorsunuz. Numaralar arasına ara vermeden önceki rakamların sonuna yeni sayılar eklemeye devam edersiniz.

Bununla birlikte, bunun yerine daha fazla böyle bir şey deneyin:

myray[raycount] = c;

Canlı Demo

Alternatif olarak:

raycount

Canlı Demo

    
0
2019-05-08 21: 43: 34Z
  1. Girişiniz için teşekkür ederiz! Önerdiğiniz değişikliklerin bazılarını uyguladım ve doğru yönde atılmış adımlar. Ayrıca, kodu kolaylaştıracak diğer yöntemleri de takdir ediyorum. Dizeleri ve tamsayıyı sıfırlamak istifleme sorununu çözüyor gibiydi, ancak yine de diziye yığılmış tüm sayıları alma ve dizenin bir sayıya dönüştürülmesinde sıkıştım. Gönderdiğiniz koda göz atacağım ve sorunumu daha da çözebilecek miyim diye bakacağım. : -)
    2019-05-08 20: 06: 06Z
  2. @ Daniel, yazdığınız gerçek girişi ve beklenen sonucun nasıl görünmesi gerektiğini göstermek için sorunuzu düzenlerseniz yararlı olur.
    2019-05-08 20: 09: 37Z
  3. Aynı sonucu vermesi gereken 3 örnek ekledim.
    2019-05-08 20: 39: 55Z
  4. @ Daniel Cevabımı güncelledim. İlk örneğimde düzelttiğim bir hata oluştu.
    2019-05-08 21: 38: 44Z

Yani, sayıları ve karakterleri farklı dizilere ayırmak istiyorsunuz. Blok ise karakterleri kontrol ediyorsanız, stoi () 'nin işe yaramayacağından şüpheleniyorum. Bir tamsayıya yazmanız daha iyi olur.

myray[]

Bu watemp diziniz sayıları içerecektir.

    
- 1
2019-05-08 16: 34: 59Z
  1. Bana bu cevabın neden azaldığını söylerseniz minnettar olurum Teşekkürler.
    2019-05-13 08: 34: 19Z
str3
kaynak yerleştirildi İşte