String.length () или String.size () возвращает число с «\ x» (\ x5) - PullRequest
0 голосов
/ 10 января 2019

Я пытался получить количество символов в моем int значении. Для этого я конвертировал int в string и взял .length(). Преобразование из int в string выглядит хорошо, но когда я проверяю значение .length(), кажется, что есть дополнительный символ (консоль показывает, что есть значение "\ x5"). Вы знаете, где может быть проблема?

Я тоже пытался .size(), те же результаты. Я использовал эту функцию раньше (.length()) и фактически получил правильные результаты.

int main() {

int roz = 703;

string dlus = to_string(roz);

string dlus1 = dlus.size();

int dlu = atoi(dlus1.c_str());

}

Результаты:

dlus1 = "3" 

dlu = "3"

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Чтобы добавить к объяснению здесь, как и что происходит. Во-первых, я не смог воспроизвести вашу проблему, но у меня есть вариант, который не предупреждает о clang и gcc, но все еще не тот, который вы хотите:

std::string dlus = std::to_string(roz);
dlus += dlus.size();

Здесь используется доступная перегрузка:

basic_string& operator+=( CharT ch );

и он молча преобразует целое число в символ. Даже с -Wall он не помечен как плохой.

Теперь, вот где clang-tidy входит . С этим правилом этот код помечается как возможно неправильный, и это указывает, что вы должны использовать std::to_string, чтобы правильно преобразовать число в строку перед добавлением.

Если мы знаем, какой компилятор вы использовали, то мы также можем выяснить, какой конструктор использовался в этом случае.

0 голосов
/ 10 января 2019

Я полагаю, вы хотите что-то вроде этого:

int main()
{
    int number = 703;
    size_t count = std::to_string(number).length();
    std::cout << count;
}

Но это двойной вопрос. Более подробную информацию вы можете найти здесь: C ++ - как найти длину целого числа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...