Попробуйте что-то вроде этого:
String TfrmMain::GetCorrectCardName(String Str)
{
const TReplaceFlags flags = TReplaceFlags() << rfReplaceAll;
String Name = StringReplace(Str, "@", "/", flags);
Name = StringReplace(Name, "\\", "/", flags);
Name = StringReplace(Name, "#", "/", flags);
Name = StringReplace(Name, "_", " ", flags);
Name = StringReplace(Name, "*Name", " ", flags);
return Name;
}
Тем не менее, StringReplace()
будет циклически повторять строку каждый раз, поэтому, если вы хотите придерживаться одного ручного цикла, попробуйте что-то более похожее на это:
String TfrmMain::GetCorrectCardName(String Str)
{
String Name;
for(int Name_no = 1; Name_no <= Str.Length(); ++Name_no)
{
switch (Str[Name_no])
{
case '@':
case '\\'
case '#':
Name += '/';
break;
case '_':
Name += ' ';
break;
case '*':
if (Str.SubString(Name_no+1, 4) == "Name")
{
Name += " ";
Name_no += 4; // Keep the numbers right.
break;
}
// fall through to next case
default:
Name += Str[Name_no];
break;
}
}
return Name;
}