2016-01-09 2 views
-2

Я хотел бы использовать функцию substr(), чтобы получить цепочку символов от 1. до последней, без 0. Должен ли я сделать это так? : string str = xyz.substr(1, xyz.length()); или (xyz.length() - 1)? И почему?substr() от 1. до последнего символа C++

+4

Я сделаю 'xyz.substr (1)' ' – styvane

ответ

4

Сигнатуры подстроки является

string substr (size_t pos = 0, size_t len = npos) const; 

Поскольку длина новой строки составляет 1 меньше, чем старая строку вы должны назвать его следующим образом:

string str = xyz.substr(1, xyz.length() - 1); 

Вы можете фактически опускаете второй аргумент по умолчанию: string :: npos. «Значение string :: npos указывает все символы до конца строки». (см. http://www.cplusplus.com/reference/string/string/substr/).

+3

xyz.substr (1) 'намного лучше. –

5

Вам не нужно указывать количество символов для включения. Так как я сказал в моем comment:

string str = xyz.substr(1) 

Это возвращает все символы до конца строки

3

оба заявления

std::string str = xyz.substr(1, xyz.length()); 

и

std::string str = xyz.substr(1, xyz.length() - 1); 

действительны (хотя первый может запутать читателя кода) при условии, что размер str не равен 0.

Однако эта декларация

std::string str = xyz.substr(1); 

более выразительным.

Если строка xyz может быть пустой строкой, то вы должны написать что-то вроде

std::string str = xyz.substr(!xyz.empty() ? 1 : 0); 

или

std::string str = xyz.substr(xyz.size() != 0 ? 1 : 0); 
+0

также первые два ненужных вычисляют длину строки. – styvane

+0

@ user3100115 Все они должны определить длину, но она не вычислена, поэтому не проблема. ('string :: size()' требуется, чтобы быть O (1).) –

Смежные вопросы