Я новичок со строками в C ++. Я просто запутался с работой приведенного ниже кода (используется для перестановки строки).
std:: string rev;
for(int i= str.size()-1; i>=0; --i)
{
rev.push_back(str[i]);
}
std:: cout<<" Reversed= "<<rev<<endl;
Проблема в том, что последний символ строки является нулевым символом '\0'
, Таким образом, когда цикл выполняется для первой итерации, он должен помещать нулевой символ в начале rev
и еще одна вещь, здесь строка rev
не может быть нулевым, прекращено, потому что '\0'
не назначается последним символом строки.
Но когда я запускаю Программу, она работает нормально. Я знаю, что ошибаюсь, думая обо всем этом. Кто-нибудь может объяснить работу, пожалуйста? Я буду рад и благодарен вам 🙂
Терминатор null фактически не считается частью std::string
, Это входит в игру только когда вы звоните c_str()
, Так size()
а также length()
не включать терминатор. И на самом деле вы можете положить нулевые символы в середине std::string
и все будет работать, кроме c_str()
(если ваша строка может содержать нули, вы должны использовать data()
а также size()
).
Оператор ‘/ 0’ добавляется автоматически, так что вы выполняете цикл только до символа непосредственно перед ‘/ 0’. Это всегда там, так что вы не видите никаких изменений.