Witam wszystkich,
Chciałem napisać taki kod, który usuwa spacje z podanego zdania - i działa, ale jedynie dla 1 spacji - po wpisaniu i zatwierdzeniu jakiejkolwiek spacji więcej program się wysypuje i wyrzuca błąd w kosoli:
/home/keith/builds/mingw/gcc-9.2.0-mingw32-cross-native/mingw32/libstdc++-v3/include/bits/basic_string.h
:1067: std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference std::__cxx11::basic_string<_CharT,
_Traits, _Alloc>::operator[](std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _Cha
rT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_
CharT, _Traits, _Alloc>::reference = char&; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_ty
pe = unsigned int]: Assertion '__pos <= size()' failed.
A sam program kończy się "process returned 3".
#include <iostream>
#include <string>
using namespace std;
int main()
{
string sms;
int i=0, j=0, counter=0;
getline(cin, sms);
//dynamiczna alokacja zmiennej o takiej liczbie znaków jak orginalne wczytane zdanie
/* jest to typ char, bo string zaalokowany w ten sposób zawiera albo numer miejsca w
pamięci(bez użycia gwiazdki), albo przypadkowe znaki(1 lub inne (zależy chyba od
długości), a ostatecznie po wpisaniu 2 spacji wysypuje się tak samo */
char *sms2 = new char[sms.length()];
for(i, j; i<sms.length(); i++, j++)
{
if(sms[j]==' ')
{
j++;
sms2[i] = sms[j];
}
else
{
sms2[i] = sms[j];
}
}
cout<<sms2;
return 0;
}
Przykład danych wejściowych:
lol wow
lol wow lol
Wyjście:
lolwow
(podany wyżej błąd)
Czy miałby ktoś pomysł, jak naprawić ten błąd?