Глядя на код:
size_t position = a.find(" ");
if(position != -1)
... предупреждение связано с тем, что size_t
- это тип без знака, поэтому он никогда не может быть -1. В действительности сравнение может быть успешным, но только потому, что -1 преобразуется в size_t
перед сравнением (в процессе становится наибольшим возможным значением для size_t
). Если вы знаете об этом и хотите, чтобы это произошло, явное приведение -1 к size_t
обычно устраняет предупреждение. Чтобы быть технически правильным, вероятно, было бы лучше использовать std::string::npos
вместо -1.
Еще лучше было бы устранить все это, например, поместив вашу строку в stringstream
и выделив слова с помощью operator>>
.
Редактировать: Поскольку это кажется довольно интересной (и распространенной) проблемой, я решил написать свою собственную версию для удовольствия. Вам лучше не сдавать это, если вы не изучите это действительно тщательно, потому что я могу практически гарантировать, что у любого профессора, увидевшего это , будет много вопросов (и если вы дадите какой-нибудь ответы, вопрос, над которым вам нужно будет поработать: «Хотели бы вы с этим жарить?):
#include <string>
#include <iostream>
#include <iterator>
class rev_string {
std::string data;
public:
rev_string(std::string const &input) {
data.assign(input.rbegin(), input.rend());
}
friend std::ostream &operator<<(std::ostream &os, rev_string const &r) {
return os << r.data;
}
};
int main() {
std::copy(std::istream_iterator<std::string>(std::cin),
std::istream_iterator<std::string>(),
std::ostream_iterator<rev_string>(std::cout, " "));
return 0;
}
Обратите внимание, что на самом деле есть гораздо более чистый способ сделать это (используя std::transform
), но он не совсем неясен, чтобы гарантировать отключение сигналов тревоги, когда / если его видит проф, поэтому я не публикую его (в хотя бы пока).