Как найти и заменить слово в текстовой строке - PullRequest
0 голосов
/ 07 декабря 2018

Я пытался удалить символ, он работает, но я не могу найти способ удалить определенные слова.

Есть ли способ, которым кто-то может научить меня, как найти и заменить слово пробелами?

Кто-то, пожалуйста, покажите мне, что я делаю не так.

String TfrmMain::GetCorrectCardName(String Str)
{
    String Name = "";
    String Name_Before = Str;
    String NewName = "";


    //Change the name symbols.
    for(int Name_no = 0; Name_no < Name_Before.Length(); Name_no++)
    {
        NewName = Name_Before[Name_no];
        if(Name_Before.c_str()[Name_no] == '@'||Name_Before.c_str([Name_no] == '\\' 
            || Name_Before.c_str()[Name_no] == '#')
        {
            Name += '/';
        }
        else if(Name_Before.c_str()[Name_no] == '_')
        {
            Name += ' ';
        }
        else if(Name_Before.c_str()[Name_no] == '\'')
        {
            Name += '\'';
        }

        // The error starts here  
        else if (NewName == "*Name")
        {
            Name_Before.Insert("         ",Name_no);
            Name = Name_Before;
            Name_Before++; // Keep the numbers right.
            Name_no++; // Same ^
        }
        // end here 

        else
        {
            Name += Name_Before.c_str()[Name_no];
        }
    }
    return Name;
}

1 Ответ

0 голосов
/ 07 декабря 2018

Попробуйте что-то вроде этого:

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;
}
...