Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa stringom

[es] :: .NET :: Problem sa stringom

[ Pregleda: 1944 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vampslayer
fsr
Charlotte

Član broj: 282983
Poruke: 42
*.CARNet.hr.



Profil

icon Problem sa stringom07.04.2011. u 23:27 - pre 158 meseci
Izdvajanje realnog i imaginarnog dijela iz kompleksnog broja zapisanog kao string
Code:

  public Complex Vracanje_Complex(string s)
        {
            
            double r = Convert.ToDouble(s.Substring(0, s.LastIndexOf(" ")));
            
            int len = s.Length - (s.IndexOf("j") + 1);

            
            double i = Convert.ToDouble(s.Substring(s.IndexOf("j") + 1, len));

            return new Complex(r, i);
        }

problem je kad je imaginarni dio negativan(tj. vrati mi pozitivni dio)
Broj je u stringu s zapisan kao s="1.234 -j4.1234" (Ima razmak izmedju zadnje znamenke realnog dijela i operatora)

Kako da mi vrati img=-4.1234 a ne img=4.1234
 
Odgovor na temu

lonelyrider_44
Zrenjanin

Član broj: 42310
Poruke: 445
*.com
Via: [es] mailing liste



+20 Profil

icon Re: Problem sa stringom08.04.2011. u 00:41 - pre 158 meseci
Zašto ne pročitaš šta se nalazi ispred "j" ? Znači to bi bilo nešto ovako:
Code (csharp):

public Complex Vracanje_Complex(string s)
{
     double r = Convert.ToDouble(s.Substring(0,
     s.LastIndexOf(" ")));
     int len = s.Length - (s.IndexOf("j") + 1);
     double i = Convert.ToDouble(s.Substring(s.IndexOf("j") + 1, len));

     //provera da li je broj negativan
     if(s.Substring(s.IndexOf("j")-1,1)=="-")
          i = -i;

     return new Complex(r, i);
}
 

Ovo bi trebalo da ti radi posao, mada samo kada je kompleksan broj zadat u
strogo određenom formatu. Da bi se lepo parsirao string i kada su zapisani
drugačije, ili sa više razmaka (recimo prvo imaginaran deo, pa onda
realan), trebao bi da probaš da promeniš algoritam.

Evo jedne ideje: ako je uvek ovaj format stringa kao u primeru koji si
dao, zašto ne bi uzeo od celog stringa s="1.234 -j4.1234" ovaj deo:
"-j4.1234", i zatim izbaciš "j" i ostaje ti "-4.1234" i to onda proslediš
za konvertovanje u double. Tada nećeš imati problema sa znakom.
Usput, ne moraš koristiti Convert.ToDouble(string), imaš u klasi double
metodu Parse (double.Parse(string)).


--
Using Opera's revolutionary email client: http://www.opera.com/mail/
 
Odgovor na temu

vampslayer
fsr
Charlotte

Član broj: 282983
Poruke: 42
*.CARNet.hr.



Profil

icon Re: Problem sa stringom08.04.2011. u 08:06 - pre 158 meseci
Hvala,da radi odlicno,string je vazda u tom formatu.
I sad pitanje,Zasto bi koristio double.Parse umjesto Convert.todouble??Brze se izvrsava ili sta vec??
 
Odgovor na temu

lonelyrider_44
Zrenjanin

Član broj: 42310
Poruke: 445
*.com
Via: [es] mailing liste



+20 Profil

icon Re: Problem sa stringom08.04.2011. u 10:05 - pre 158 meseci
Ne znam da se brže izvršava. double.Parse je osnovnija metoda za
konverziju stringa u double, moguće je da Convert.ToDouble kad se izvršava
ustvari poziva double.Parse pa vraća rezultat koji dobije, i ako je tako,
onda je double.Parse brža jer ima jedan poziv f-je manje. Ali to kod
današnjih računara ne pravi razliku. Spomenuo sam ti čisto informativno.
Koristi je ako je nađeš zgodnom, ako ne, i ovako je ok.
--
Using Opera's revolutionary email client: http://www.opera.com/mail/
 
Odgovor na temu

w3bl0rd
Varaždin, Hrvatska

Član broj: 82659
Poruke: 380
213.147.114.*



+26 Profil

icon Re: Problem sa stringom08.04.2011. u 11:00 - pre 158 meseci
Citat:

Ne znam da se brže izvršava. double.Parse je osnovnija metoda za
konverziju stringa u double, moguće je da Convert.ToDouble kad se izvršava
ustvari poziva double
.Parse pa vraća rezultat koji dobije, i ako je tako,
onda je double.Parse brža jer ima jedan poziv f-je manje. Ali to kod
današnjih računara ne pravi razliku. Spomenuo sam ti čisto informativno.
Koristi je ako je nađeš zgodnom, ako ne, i ovako je ok.


crveni text ti netreba ;)
Bolje je koristiti Decimal.Parse ili bilo koji drugi tip podatka.Parse od Convert.To...
there's no place like 127.0.0.1
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12850



+4784 Profil

icon Re: Problem sa stringom08.04.2011. u 11:22 - pre 158 meseci
Razlika je u tome sto Convert.ToDouble vraca nulu ako je string null umesto exception-a:
Code (csharp):

public static double ToDouble(string value)
{
    if (value == null)
        return 0.0;
    return double.Parse(value, CultureInfo.CurrentCulture);
}

 
Odgovor na temu

lonelyrider_44
Zrenjanin

Član broj: 42310
Poruke: 445
109.94.104.*



+20 Profil

icon Re: Problem sa stringom08.04.2011. u 11:58 - pre 158 meseci
A i taj expception može da se izbegne sa tipPodatka.TryParse, umesto tipPodatka.Parse .
Pritom, odmah se i hvata rezultat TryParse-a, tj. da li je uspelo ili ne, pa sam odlučuješ da li ćeš da postaviš neku defaultnu vrednost (0.0, recimo) ili da na zaustaviš program, itd..
 
Odgovor na temu

[es] :: .NET :: Problem sa stringom

[ Pregleda: 1944 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.