oneiro napisał(a):Jeszcze jedna wątpliwość, dlatego:
Jedna to zmienna - tego chyba wyjaśniać nie muszę, druga to tablica, gdyż zdefiniowano dwa elementy, to w nawiasach kwadratowych mówi, że jest to tablica typu String zawierająca dwa elementy. W tablicy możesz zdefiniować łańcuchy znaków, a nie tylko pojedyncze znaki, np:
String tab[2];
tab[0] = "tekst 1";
tab[1] = "tekst 2";
Więc jest praktyczniejsza niż sama zmienna, chociaż w tym konkretnym przypadku mamy do czynienia z pojedynczymi znakami, więc zmienna też wystarczy.
oneiro napisał(a):ale przecież String bez nawiasów kwadratowych jest nie ograniczą tablicą
Można użyć zmiennej String, ale liczenie elementów rozpoczyna się od 1 a nie od 0, czyli kod powinien wyglądać np. tak:
float liczba;
String sep = ".,";
String decimal = (AnsiString)cDecimal;
for(int x = 1; x < sep.Length(); x++)
{
if( Edit1->Text.LastDelimiter( sep[x] ) && sep[x] != decimal )
{
Caption = Edit1->Text.LastDelimiter( sep[x] ) ;
Edit1->Text = StringReplace(Edit1->Text, sep[x], decimal, TReplaceFlags() << rfReplaceAll);
break;
}
}
liczba = Edit1->Text.ToDouble();
Edit2->Text = liczba;
a w Twoim przypadku:
Plik nagłówkowy np. Unit1.h
public:
// ..........
String sep;
Plik źródłowy np. Unit1.cpp
void __fastcall TForm1::FormCreate(TObject *Sender)
{
point = use_facet<numpunct<char> >(locale("")).decimal_point();
sep = ".,";
}
Nie twierdziłem, że nie możesz użyć samej zmiennej, ale Ty używałeś zarówno zmiennej jak i tablicy. Wypełniałeś wartościami tablicę lokalną, a zmienna publiczna pozostawała pusta. Podałem kod z tablicą, gdyż wolę jak kod jest przejrzysty, czyli potrzebuję tablicy używam tablicy.
oneiro napisał(a):gdybyś korzystał z funkcji sep.length
Funkcja Length() zwraca długość łańcucha znaków i jeżeli użyjesz zmiennej AnsiString zamiast tablicy to musisz użyć funkcji Length zamiast makra ARRAYSIZE.
oneiro napisał(a):PS. Gdybym miał zmienną char, zamiast String, to wszytko powinno działać tak samo (Twój ostatni kod) - bo separator i tak jest jednym znakiem
Funkcja StringReplace operuje na zmiennych String nie char, ale po konwersji char na String mógłbyś tak zrobić, tylko po co konwertować, skoro od razu można użyć zmiennej String.