• 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ą

0 głosów
109 wizyt
pytanie zadane 13 kwietnia w C# i .NET przez MakaBresk Użytkownik (910 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 przez Velta Pasjonat (18,390 p.)
edycja 13 kwietnia 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 przez MakaBresk Użytkownik (910 p.)
Jak wpisuje 25.5 to nic mi z tym nie robi. Jak działa ta metoda?
komentarz 13 kwietnia przez MakaBresk Użytkownik (910 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 przez jankustosz1 Pasjonat (19,170 p.)
22.5 zwraca false bo musisz podać liczbę z przecinkiem, jak już zostało powiedziane.
0 głosów
odpowiedź 13 kwietnia przez Antero00 Gaduła (3,390 p.)
bool isContains = text.Any(char.IsDigit) 

zwraca true jeśli string zawiera cyfrę. 

komentarz 14 kwietnia przez MakaBresk Użytkownik (910 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 89 wizyt
0 głosów
1 odpowiedź 569 wizyt
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

64,830 zapytań

111,290 odpowiedzi

234,054 komentarzy

46,703 pasjonatów

Przeglądających: 248
Pasjonatów: 15 Gości: 233

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...