Pobieranie pierwszych liter ze wszystkich wyrazów w stringu

Odpowiedz Nowy wątek
2011-07-13 09:02
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


<span style="color: red">pomyśl o wczoraj, dziś, jutra może nie być nic . . .</span>

Pozostało 580 znaków

2011-07-13 09:27
0
string wth = "nie umiem jeszcze programować, ale bardzo chcę.";
char pierwszaLitera = wth[0];
Przeczytaj temat jeszcze raz i zastanów się, co napisałeś :) - Patryk27 2011-07-13 09:43

Pozostało 580 znaków

2011-07-13 09:31
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...


<span style="color: red">pomyśl o wczoraj, dziś, jutra może nie być nic . . .</span>

Pozostało 580 znaków

2011-07-13 09:47

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

edytowany 1x, ostatnio: massther, 2011-07-13 09:48
Podobno nie używasz foreach. ;P - somekind 2011-07-14 00:15
W swoim kodzie bym nie użył :D - massther 2011-07-14 08:13

Pozostało 580 znaków

2011-07-13 09:49
qwe
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

masochista - rna 2011-07-13 10:02

Pozostało 580 znaków

2011-07-13 09:51
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

edytowany 2x, ostatnio: Sarrus, 2011-07-13 09:56

Pozostało 580 znaków

2011-07-13 10:51
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”.

W założeniach ani przykładzie autora nie było nic o nieeuropejskich znakach. :) - somekind 2011-07-14 00:17

Pozostało 580 znaków

2011-07-13 11:05
pan kuba
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 :)

Pozostało 580 znaków

2011-07-13 11:26
pan kuba
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.

To nie działa poprawnie dla słów 1 literowych. We wzorcu zamiast w+ trzeba dać w*. - stfu 2011-07-13 11:46

Pozostało 580 znaków

2011-07-13 12:37
msm
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.

edytowany 2x, ostatnio: msm, 2011-07-13 12:37
Woo najkrutsze :) Możesz iść i zerwać sobie kfiateg ;) - O_o 2011-07-13 12:59

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