Pobieranie pierwszych liter ze wszystkich wyrazów w stringu

0

Witam.
Szukałem po internecie i nigdzie nie mogę znaleźć jak pobrać pierwsze litery z łańcucha tekstowego.

np:
temp = 4programmers is the best
1stletters =4itb

z góry dzięki

0
string wth = "nie umiem jeszcze programować, ale bardzo chcę.";
char pierwszaLitera = wth[0];
0
massther napisał(a)
string wth = "nie umiem jeszcze programować, ale bardzo chcę.";
char pierwszaLitera = wth[0];

Temat brzmi "pobieranie pierwszych liter ze wszystkich wyrazów w stringu" a nie tylko pierwszego...

1

Jak się jest ignorantem to podpowiedzi też się nie rozumie. A szukać to ty niczego chyba nie umiesz. Przeczytaj chociaż pierwsze 4-5 rozdziały jakiejś książki do C# i byś wiedział.

string wtf = "nie umiem jeszcze programować, ale bardzo chcę.";
List<char> pierwszeLitery = new List<char>();
string[] wyrazy = wtf.Split(' ');
foreach(string wyraz in wyrazy)
  pierwszeLitery.Add(wyraz[0]);

Tak, tak, zaraz będzie że co jak są dwie spacje między wyrazami, czy znaki końca linii etc. Cóż wszystkiego na tacy nie będzie, trzeba samemu trochę ruszyć główką.

0

może tak:
w pętli for pobierasz 1 literę Twojego wyrazu, "czekasz" aż pętla dojdzie do białego znaku[spacji], pobierasz znak za białą spacją, i tak do końca stringu ;D

1

użyj metody System.String.IndexOf do wyszukania spacji
http://msdn.microsoft.com/en-us/library/5xkyx09y.aspx
albo lepiej podziel string na tablicę stringów - funkcja Split i wtedy każdy element tablicy to będzie jeden wyraz.

EDIT: trochę się widzę spóźniłem z odpowiadaniem ;]
EDIT2:
przy split użyj opcji StringSplitOptions.RemoveEmptyEntries żebyś nie miał pustych wyrazów w przypadku wystąpienia więcej niż jednej spacji między wyrazami

0
pierwszeLitery.Add(wyraz[0]);

to się wykaszani na egipskich hieroglifach, które zajmują dwa chary jeden. nie żeby to było szczególnie istotne, „no chyba że”.

0
Azarien napisał(a)

to się wykaszani na egipskich hieroglifach, które zajmują dwa chary jeden

Spoko, spoko, jak nam MSDN tłumaczy:

The value of a Char object is its 16-bit numeric (ordinal) value

Zatem są to dwa bajty, nie dwa chary :)

2

Co do problemu właściwego: pomóc mogą też wyrażenia regularne.

string ptrn = @"\s*(.)\w+",
input = "cep cepa cepem pogania",
  firstLetters = "";

foreach (Match m in Regex.Matches(input, ptrn))
{
  if (m.Success)
    firstLetters += m.Groups[1].Value;
}

MessageBox.Show(firstLetters);

Wyrażenie regularne mówi, że najpierw sprawdzamy białe znaki, które jednak nie są konieczne (dopasowanie tych wyrazów na początku stringu). Następnie przechwytujemy jeden znak (ta kropka w nawiasach), dalej cała reszta słowa.

1

Azarien:to się wykaszani na egipskich hieroglifach, które zajmują dwa chary jeden

Spoko, spoko, jak nam MSDN tłumaczy:

The value of a Char object is its 16-bit numeric (ordinal) value

Zatem są to dwa bajty, nie dwa chary :)

Dwa bajty są normalnie. Azarien nie przejęzyczył się i miał na myśli dwa chary czyli parę surgoatów - jak nam msdn tłumaczy, funkcja http://msdn.microsoft.com/en-us/library/xcwwfbb8.aspx do czegoś musi w końcu służyć...

Co do zadania - jeszcze LINQ nie było:

s.Split(' ').Select((x) => x[0])

Wygrałem.

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