Witam,
Tworze program wypisujący inicjały słów ze stringa np. "Patryk Robert" --> PR , "Tomek przemek" --> Tp
Program w zasadzie działa prawidłowo, jest tylko jedna kwestia.
Na początku miałem problem tego typu, że przy pustym inpucie na wyjściu miałem znak \0. Dodałem więc warunek na początku funkcji name.empty(), return "";.
Później doszedłem jeszcze do sytuacji, że gdy mój string kończy się na spację np. "Patryk Patryk " to moim wynikiem jest PP\0 czyli znów pojawia się \0.
Moje pytanie brzmi jak mogę zmodyfikować ten kod aby program nie wypisywał \0 w tej sytuacji.
Dodam, że dla utrudnienia mogę użyć tylko tych trzech bibliotek jakich użyłem poniżej
#include<iostream>
#include<cctype>
#include<string>
std::string initials(const std::string &name)
{
if(name.empty())
{
return "";
}
std::string init;
int i = 1;
if(!isspace(name[0]))//pierwszy znak to litera
{
init += name[0];//pierwsza litera stringa to pierwsza litera inicjalu
for(char prev = name[i], next = name[i+1]; i < name.size(); i++)
{
if(isspace(name[i]) && !isspace(name[i+1])) //" [litera]"
{
init += name[i+1];
}
}
for(int p = 0; p < init.size(); p++)
{
if(init[p] == '\0')
{
std::cout << "error ";
}
}
return init;
}
else //pierwszy znak nie jest litera
{
i = 0;
for(char prev = name[i], next = name[i+1]; i < name.size(); i++)
{
if(isspace(name[i]) && !isspace(name[i+1])) //" [litera]"
{
init += name[i+1];
}
}
for(int p = 0; p < init.size(); p++)
{
if(init[p] == '\0')
{
std::cout << "error ";
}
}
return init;
}
}
int main()
{
std::cout << initials("Patryk Patryk ") << std::endl;
}