bounds of the array. niemożliwe!

Odpowiedz Nowy wątek
2011-08-24 19:58
marek
0

Witam,ostatnipo trenuje sobie C# pisząc proste programiki.Mam takie zadanko:

Napisać program, który pobiera ciąg cyfr i wypisuje ciąg znaków w postaci słownego zapisu tych cyfr. Np. dla ciągu "321" wypisywane jest "trzy dwa jeden".
Wskazówka:

program wygląda tak:using System;

class Program
{
static void Main()
{
string[] wyrazy=new String[10];
wyrazy[0]="zero";
wyrazy[1]="jeden";
wyrazy[2]="dwa";
wyrazy[3]="trzy";
wyrazy[4]="cztery";
wyrazy[5]="piec";
wyrazy[6]="szesc";
wyrazy[7]="siedem";
wyrazy[8]="osiem";
wyrazy[9]="dziewiec";

  Console.WriteLine("podaj liczbę");
   string liczba=Console.ReadLine();
   for (int i=0;i<=liczba.Length-1;i++)
   {
       char znak=liczba[i];
       int a = Convert.ToInt32(znak);
       Console.WriteLine(wyrazy[a]); // tutaj pokauje błąd
   }
   Console.ReadLine();

}
}



Mniejsza o to że tablicy używam,dlaczego mam bonus of array ? Convertuje sobie to pięknie i ma wyświetlić mi to co kryje się w tabelce pod nr. który podałem.Jeżeli jest osoba która wytłumaczy mi gdzie i DLACZEGO jest błąd będę wdzięczyny
Pozdrawiam
Marek
edytowany 1x, ostatnio: madmike, 2016-12-13 18:26

Pozostało 580 znaków

2011-08-24 20:19
0

może by tak sprawdzić jaką wartość przyjmuje a gdy zgłasza wyjątek?

Pozostało 580 znaków

2011-08-24 20:27
0

mnie się wydaje że znak po skonwertowaniu do int32 przyjmie jego kod ascii. lepiej by było zrobić coś w stylu:
int a = Convert.ToInt32(znak)-48; // 48 - kod ascii 0, nie jestem pewien czy w C# działa konstrukcja: int a = znak-'0'; tak jak w c++


░█░█░█░█░█░█░█░█░█░█░█░
Sprawdziłem przed chwilą, dokładnie tak, masz racje ;) Trzeba jeszcze odjąć 48 żeby się zgadzało ;) int a = Convert.ToInt32(znak)-48; - Madm4n 2011-08-24 20:34

Pozostało 580 znaków

2011-08-24 20:32
0

@up: Dobrze Ci się wydaje :)
można jeszcze tak: int a = Convert.ToInt32(liczba.Substring(i, 1));

@autor: zauważ różnicę w działaniu tych dwóch funkcji:
http://msdn.microsoft.com/en-us/library/ww9t2871.aspx
http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx


Pozostało 580 znaków

2011-08-24 20:34
0

Jeżeli konwertujesz char na int, to dostaniesz numer znaku (jak pisał krwq '0' to 48, '1' to 49 itd).
Inny sposób mniej elegancki :

 int a = Convert.ToInt32(znak.ToString());

EDIT:
Jak widzisz ile programistów, tyle rozwiązań ;).

edytowany 1x, ostatnio: Sarrus, 2011-08-24 20:38

Pozostało 580 znaków

2011-08-24 20:48
marek
0

Kurde NO! całkowicie zapomniałem że (int) char konvertuje na kod ascii achhh...taki drobny błąd ;) wielkie dzięki za pomoc
Pozdrawiam

Pozostało 580 znaków

2011-08-24 20:52
1

Mi działa takie coś (bez zbędnego konwertowania):

static void Main(string[] args)
        {
            String[] wyrazy = { "zero", "jeden", "dwa", "trzy", "cztery", "piec", "szesc", "siedem", "osiem", "dziewiec" };
 
            Console.WriteLine("podaj liczbę");
            String liczba = Console.ReadLine();
            for (int i = 0; i <= liczba.Length - 1; i++)
            {
                Console.Write(wyrazy[liczba[i] - '0'] + " "); // tutaj pokauje błąd
            }
            Console.ReadLine();
        }

//EDIT: Trochę poprawiony :)

edytowany 2x, ostatnio: hauleth, 2011-08-24 22:57
To akurat nie do Ciebie był ten mój post, ale dobrze, że skróciłeś kod. Tak poza tym, to chyba lepszego rozwiązania nie da się znaleźć. - somekind 2011-08-25 00:32

Pozostało 580 znaków

2011-08-24 22:41
0

Jednego tylko nie rozumiem, czemu nie można inicjalizować tablicy tak?

 string[] wyrazy = { "zero", "jeden", "dwa", "trzy", "cztery", "piec", "szesc", "siedem", "osiem", "dziewiec" };
jak nie można jak można - Azarien 2011-08-24 23:28
No ja wiem, że można, ale widzę, że coraz mniej osób tak robi... - somekind 2011-08-25 00:32
Dla niektórych inicjalizowanie elementów pojedynczo jest bardziej przejrzyste - Sarrus 2011-08-25 07:45
No... A do tego niektórym płacą od linijki napisanego kodu, więc tym bardziej muszą pojedynczo. :P - somekind 2011-08-25 12:58
To wtedy korzystanie z linq też jest niekorzystne. Lepiej zamiast tego 4 foreach z klamrami i się więcej zarobi :) - Sarrus 2011-08-25 13:04
A na początku każdego pliku wszystkie możliwe usingi wszystkich przestrzeni nazw ze wszystkich znalezionych na dysku bibliotek. :) - somekind 2011-08-25 13:55

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0