Błąd zwiazany z tablicami – zamiana słów o różnej długości

0
#include <string>
#include <stdio.h> // funckja getchar
#include <iostream>// funkcje wejscia i wyjscia

using namespace std;

void podmien(char *tekst, string szukane, string zamiennik)
{
	string temp = tekst;

	while (temp.find(szukane) != string::npos)
		temp.replace(temp.find(szukane), szukane.length(), zamiennik);

	copy(temp.begin(), temp.end(), tekst);
}


int main()
{
	cout << "Napisz zdanie: " << endl;

	while (isspace(cin.peek()))
	{
		cin.ignore(1);
	}

	char tab_wprowadzone[100];
	string slowo_szukane, slowo_zmiany;

	cin.getline(tab_wprowadzone, 100);

	cout << "Podaj slowo do wyszukania: " << endl;
	cin >> slowo_szukane;

	cout << "Podaj slowo na kore zostanie zamienione: " << endl;
	cin >> slowo_zmiany;

	int i;
	cout << endl;
	podmien(tab_wprowadzone, slowo_szukane, slowo_zmiany);

	for (i = 0; tab_wprowadzone[i] != NULL; i++)
	{
		cout << tab_wprowadzone[i];
	}

	cout << endl;

	system("pause");
	return 0;
}

gdy chce zamienić na słowo z taką samą długością nie ma żadnego problemu ale gdy słowo zamienione jest dłuższe na końcu pojawiają się krzaki ( zamiana zachodzi prawidłowo)
jak to rozwiązać?

4

Mieszasz C i C++. Jak korzystasz ze stringów to ich używaj, a nie char*. Jak używasz char* to nie używaj std::copy, które kopiuje tylko znaki (bez znaku kończącego C-string), tylko strcpy/strncpy/strcpy_s i std::string::c_str()

0

Jak chcesz użyć getline ze string to użyj globalnej wersji
getline( cin, string_var )

Przy wywołaniu find dodaj też offset jako drugi argument, bo jeśli zamiennik będzie zawierał szukane, np. ma -> nie ma to będziesz podmieniał już podmieniony fragment.

string replacePhrase(const string& text, const string& phrase, const string& replace)
{
  string result = text;
  auto it = result.find(phrase);
  while (it != result.npos)
  {
    result.replace(it, phrase.length(), replace);
    it = result.find(phrase, it + replace.length());
  }
  return result;
}

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