Podmiana pojedyńczego znaku na łańcuch znaków

0

Mam problem z podmianą pojedyńczego znaku char na kilka znaków string, czy ktoś pomoże i przetłumaczy łopatologicznie? Co robię źle, gdzie tkwi błąd?

kod:

for (int j = ciag_zn.length() - 1; j < ciag_zn.length(); j--)
    {
        if (ciag_zn[j] == 'a')
            {
                ciag_zn.replace(j, 1,"1001-");
            }
        cout << ciag_zn[j];
    }

próbowałem też:

for (int j = ciag_zn.length() - 1; j < ciag_zn.length(); j--)
    {
        if (ciag_zn[j] == 'a')
            {
                ciag_zn[j] = "1001-";
            }
        cout << ciag_zn[j];
    }

Proszę o wyrozumiałość nie jestem ekspertem w programowaniu c++ :)

3

W takim języku jak C++ każda zmienna ma określony typ co przekłada się na ilość pamięci dla niej. Nie możesz więc zamieniać sobie jednej litery na ciąg znaków. Zobacz np. co zwróci Ci typeof dla tego elementu ciągu.

0

@jurek1980: Ok rozumiem, czy jest jakis sposób na zmanę jednego znaku na 5?

0

ciag_zn to char tablica czy string ?

0

@kamil kowalski: string

1

Możesz np. dodać na pozycję przez insert. Ale pewnie koledzy którzy na co dzień zajmują się C/C++ zaproponują 25 innych rozwiązań.

0

@jurek1980: Wynik kodu:

for (int j = ciag_zn.length() - 1; j < ciag_zn.length(); j--)
    {
        if (ciag_zn[j] == 'a')
            {
                //string x = ciag_zn[j];
                //cout<< 
                ciag_zn.insert(j,"1001-");
            }
        cout << ciag_zn[j];
    }
    cout << endl

ala ma kota daje:
atok|am|ala

1tok|1m|1l1

0

Sorry źle przeczytałem. W pętli masz dziwny warunek.

string ciag_zn="abcabc";
for (int j = 0; j<ciag_zn.length(); j++)
    {
        if (ciag_zn[j] == 'a')
            {

                ciag_zn.replace(j,1,"1001-");
            }

    }

0

@kamil kowalski:
mój kod:

ciag_zn = "ala ma kota";
// zamiana spacji na |
for (int j = ciag_zn.length() - 1; j < ciag_zn.length(); j--)
    {
        if (ciag_zn[j] == ' ')
            {ciag_zn[j] = '|';}
        cout << ciag_zn[j];
    }

// odczyt tekstu od tylu i zamiana litery a na 1001-
for (int j = ciag_zn.length() - 1; j < ciag_zn.length(); j--)
    {
        if (ciag_zn[j] == 'a')
        {
            ciag_zn.replace(j,1,"1001-");
        }
        cout << ciag_zn[j];
    }

Tak wygląda i wynik tego jest taki:

atok|am|ala

1tok|1m|1l1

zamiast a powinno byc 1001- a jest tylko 1

Czy da się to zrobić?

0
string ciag_zn = "ala ma kota";
// zamiana spacji na |
for (int j = ciag_zn.length() - 1; j >-1; j--)
    {
        if (ciag_zn[j] == ' ')
            {ciag_zn[j] = '|';}
        cout << ciag_zn[j];
    }
cout<<endl;
// odczyt tekstu od tylu i zamiana litery a na 1001-
for (int j = 0; j<ciag_zn.length() ; j++)
    {
        if (ciag_zn[j] == 'a')
        {
            ciag_zn.replace(j,1,"1001-");
        }
        
2

Mozna np. tak:


#include <iostream>
#include <string>
#include <regex>


int main()
{
    
    std::cout << std::regex_replace(std::string("Ala ma kota"), std::regex("a"), "xxx");
    // Alxxx mxxx kotxxx
    

    return 0;
}

0

W zadniu masz tylko printować, czy wynikiem ma być zmieniony string, który może być użyty gdzieś indziej? Jeśli tylko print to sobie możesz po napotkaniu szukanego znaku printowac dodatkowy ciąg w "pod pętli" czy użyć cout.
Jeśli to ma być nowy string to możesz dodać przez insert po wyjściu z pętli. Spróbuj sobie to wyobrazić jak jakieś klocki gdzie dany klocek jest na danej pozycji. Co myślisz zrobić żeby na końcu mieć inne zestawienie klocków, ile ich dostajesz i ile pustych pól na ich dodanie potrzebujesz.

2

Wyciągnąć cout<<ciąg_zn poza pętle

string ciag_zn = "ala ma kota";
// zamiana spacji na |
for (int j = ciag_zn.length() - 1; j < ciag_zn.length(); j--)
    {
        if (ciag_zn[j] == ' ')
            {ciag_zn[j] = '|';}
        cout << ciag_zn[j];
    }
cout<<endl;
// odczyt tekstu od tylu i zamiana litery a na 1001-
for (int j = ciag_zn.length() - 1; j < ciag_zn.length(); j--)
    {
        if (ciag_zn[j] == 'a')
        {
            ciag_zn.replace(j,1,"1001-");
        }

    } cout << ciag_zn;
0
#include <iostream>

using namespace std;

int main()
{
    string str = "kot", wanted = "o", pretender = "OOO";
    cout<<str<<'\n';
    while(str.find(wanted) != std::string::npos) {
    str.replace(str.find(wanted),wanted.size(),pretender);
    }
    cout<<str<<'\n';

    return 0;
}
0

@kamil kowalski: Oto mi chodziło dzięki serdeczne

0

proszę :)

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