• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sprawdzanie czy podany napis jest liczbą

Object Storage Arubacloud
0 głosów
658 wizyt
pytanie zadane 13 kwietnia 2019 w C# przez MakaBresk Obywatel (1,060 p.)

Dobry wieczór, mam do napisania program który dla podanego przez użytkownika napisu sprawdzi czy jest on liczbą. Liczba może być niecałkowita (uwzględnij kropkę jako separator).

Program prawie skończony jedynie nie mogę rozgryźć jak program może pominąć kropkę przy sprawdzaniu napisu metodą IsDigit. Słyszałem, że IsDigit działa jak wpisze się przecinek zamiast kropki więc próbowałem coś takiego napisać. A dokładnie mówiąc kawałek kodu, który po znalezieniu kropki w napisie zamieni ją na przecinek. Jednak nie działa mi to tak, jak powinno.

Tutaj program, który dotychczas napisałem:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Zadanie_9
{
    class Program
    {
        static void Main(string[] args)
        {
            /* -------------------------------------------------------------------------------------------------------------------------------------------------------
             
            Napisz program, który dla podanego przez użytkownika napisu sprawdzi czy jest on liczbą. Liczba może być niecałkowita (uwzględnij kropkę jako separator)

             ------------------------------------------------------------------------------------------------------------------------------------------------------- */

            Console.WriteLine("Podaj dowolny napis:");
            string inscription = Console.ReadLine();

            for (int i = 0; i < inscription.Length; i++)
            {
                //Sprawdzenie czy podany napis jest liczbą dziesiętną i nie posiada kropki.
                if (char.IsDigit(inscription, i) && !inscription.Contains("."))
                {
                    if (i == (inscription.Length - 1))
                        Console.WriteLine("To jest liczba.");
                }
                //Sprawdzenie czy podany napis zawiera kropkę. Jeśli tak zamienia ją z przecinkiem.
                else if (inscription.Contains("."))
                {
                    inscription.Replace(".", ",");
                }
                //Sprawdzenie czy podany napis jest liczbą dziesiętną i posiada kropkę.
                else if (char.IsDigit(inscription, i) && inscription.Contains(".")) //Problem z sprawdzeniem . w IsDigit.
                {
                    if (i == (inscription.Length - 1))
                        Console.WriteLine("To jest liczba.");
                }
                else
                {
                    //Wyświetlenie komunikatu i zakończenie działa pętli poprzez instrukcję sterującą break.
                    Console.WriteLine("To nie jest liczba.");
                    break; 
                }
            }

            //Program oczekuje na wciśnięcie dowolnego klawisza na klawiaturze.
            Console.WriteLine("\n" +"Wciśnij dowolny klawisz, aby zakończyć program.");
            Console.ReadKey();
        }
    }
}

 

Język C# zacząłem dopiero się uczyć (napisałem raptem kilka prostych programów) więc proszę o wyrozumiałość.
Szybkie i trafne odpowiedzi bardzo mile widziane :)

2 odpowiedzi

0 głosów
odpowiedź 13 kwietnia 2019 przez Velta Maniak (52,010 p.)
edycja 13 kwietnia 2019 przez Velta

Możesz użyć metody Double.TryParse:

bool isNumber = double.TryParse(inscription, out double n);

Separatorem jest tutaj bodajże przecinek, więc dodatkowo:

inscription = inscription.Replace('.', ',');

 

komentarz 13 kwietnia 2019 przez MakaBresk Obywatel (1,060 p.)
Jak wpisuje 25.5 to nic mi z tym nie robi. Jak działa ta metoda?
komentarz 13 kwietnia 2019 przez MakaBresk Obywatel (1,060 p.)

@Velta,
Po sprawdzeniu działania IsDigit widzę, że ta metoda nie zwraca true, ani dla kropki, ani dla przecinka. Więc jak mogę ominąć przy sprawdzaniu ten operator? TryParse próbowałem na sucho sprawdzić jak działa, ale ta metoda nie daje żadnego rezultatu. Wpiszę liczbę 25.5 to zwraca false.

komentarz 14 kwietnia 2019 przez jankustosz1 Nałogowiec (35,880 p.)
22.5 zwraca false bo musisz podać liczbę z przecinkiem, jak już zostało powiedziane.
0 głosów
odpowiedź 13 kwietnia 2019 przez Antero00 Gaduła (3,670 p.)
bool isContains = text.Any(char.IsDigit) 

zwraca true jeśli string zawiera cyfrę. 

komentarz 14 kwietnia 2019 przez MakaBresk Obywatel (1,060 p.)

Ale to dalej nie rozwiązuje  mojego problemu. Pominąłem sprawdzanie pozostałych warunków, gdy napotka w napisie znak interpunkcyjny.

 

if (char.IsPunctuation(inscription, i))
                    continue;

 

Podobne pytania

0 głosów
2 odpowiedzi 813 wizyt
0 głosów
1 odpowiedź 1,869 wizyt
pytanie zadane 9 lutego 2020 w C i C++ przez dario Nowicjusz (200 p.)
0 głosów
0 odpowiedzi 306 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...