Minden szó utolsó betűjének nagybetűsítését hogy lehet szépen/hatékonyan megodlani C#-ban?
A CodeHunt nevű játék egyik feladata ez. (www pont codehunt pont com)
2 "algoritmust" is írtam rá, de sajnos mindkettő megoldást csak 1 "csillagosra" értékelte a 3-ból:
string res = "";
bool newWord = true;
for (int i = s.Length-1; i >= 0; i--) {
char ch =s[i];
if (ch == ' ') newWord=true;
else if (newWord) { ch = Char.ToUpper(ch); newWord=false; }
res = ch + res;
}
return res;
Második:
s += " ";
string res = "";
for (int i=0; i < s.Length-1; i++)
if (s[i+1] == ' ') res += Char.ToUpper(s[i]);
else res += s[i];
return res;
Hogyan érhetnék el jobb eredményt ezen a pályán?
Megpróbáltam string összefűzések nélkül is, char tömbbel:
var chs = s.ToCharArray();
bool newWord = true;
for (int i = chs.Length-1; i >= 0; i--) {
char ch =chs[i];
if (ch == ' ') newWord=true;
else if (newWord) { chs[i] = Char.ToUpper(ch); newWord=false; }
}
return new string(chs);
De ez is csak 1 csillag:(
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
A C#-nak vannak beépített kezelő függvényei, azokat nem lehet használni?
res = s.Substring(s.Length-2) + s.Substring(s.Length-1, 1).toUpper();
De, lehet. Próbáltam azzal is, de az még bonyolultabb.
Mert először splittelni kell, utána minden szóra nagybetűsíteni végét (ahogy írtad), és utána összefűzni.
Úgy emlékszem arra sem kaptam jobb eredményt...
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
Regexet szerintem így lehetne használni:
Ugye az első kettő paraméter a "miben, mit".
A harmadik lesz az érdekes. Ez gyakorlatilag egy függvény, ami megkapja majd az illeszkedő részt és amit ez a függvény visszaad, arra lesz kicserélve.
Itt van példa, hogyan kell használni a MatchEvaluatort.
Itt pedig a Match típus leírása:
Ezek alapján mennie kell...
Kösz, megvan.
Ez a 3 csillagos megoldás:
return Regex.Replace(s, ". |.$", delegate(Match match) { return match.Value.ToUpper(); });
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!