Ваш первый подход - звук с одной коррекцией - вам нужно использовать
text = text.substr(0, 140);
вместо text = text.substr(1, 140);
.Контейнеры (которые содержат строку) в C / C ++ начинаются с индекса 0, и вы запрашиваете обрезку строки с позиции 1. Это прекрасно, но если длина строки составляет всего один символ, вызов text.substr(1, 140);
вызоветне обязательно вызывает сбой программы, но также не приведет к желаемому результату.
Согласно этот источник , substr
вызовет исключение вне диапазона, если вызывается с начальной позицией, большей длины строки.В случае строки из одного символа позиция 1 будет равна длине строки, но возвращаемое значение не имеет смысла (на самом деле, это может быть даже неопределенное поведение, но я не могу найти подтверждение этого утверждения - в вашем и моем случаевызов его возвращает пустую строку).Я рекомендую вам проверить это самостоятельно в разделе интерактивного кодирования по ссылке выше.
Ваш второй подход пытался передать строку функции, которая ожидала массивы символов в стиле C.Опять же, больше можно найти здесь .Как и в случае ошибки, компилятору не удалось найти подходящую функцию, поскольку аргумент был строкой, а не массивом char.Некоторые функции выполняют преобразование строки в тип char, но здесь это не так.Вы можете преобразовать строку в массив char самостоятельно, как, например, описано в этом посте , но первый подход намного больше соответствует практикам C ++.
Последнее замечание - в настоящее время выЯ полагаю, что вы захотите изменить это только на одной строке ввода.