У меня есть строка ... «ЯДРА», и мне сложно использовать подстроку для эффективного управления строкой. Моя цель - добавить «-» каждые 3 символа. Моя проблема в том, что, когда «APPLES» проходит, он возвращает «APP-ES-», что неверно, я пытаюсь вернуть его «APP-LES-» любые предложения? Вот мой код до сих пор ...C++: использование подстроки для создания новой строки
ответ
Просто создайте отдельную строку, скопировав соответствующие детали.
std::string s;
for(size_t i = 0; i < str.length(); i += 3) {
s += str.substr(i, 3) + "-";
}
(Точно так же вы обратите внимание, это точно: str.substr(j,j+3);
неверен, он не будет копировать 3-х символов, он будет копировать j + 3
символов Прочитайте документацию более тщательно.).
+1 (особенно для' size_t'), но вы должны упомянуть об ошибках повторной конкатенации строк. – Bathsheba
@Bathsheba Спасибо! Ну, может быть, да :) Я не могу беспокоиться о производительности, пока программа не верна, хотя ;-) (и все равно она будет оптимизирована). –
Вы увеличивающиеся J дважды:
for(int j = 0; j <= str.length(); j++){
^-- once here
...
j = j+3;
^-- and again here
Кроме того, похоже, что вы можете получить два -
сек в конце строки с длиной это кратно трем, так как вы проверяете для j <= str.length()
вместо j < str.length()
T чень:
for(size_t j = 0; j < str.length(); j+=3){
str_substr += str.substr(j,3) + '-';
}
cout << str_substr;
Поскольку вы, очевидно, просто скопировав результат cout
, во всяком случае, может быть, это проще всего пропустить промежуточную строку, и просто скопировать 3-х символов в COUT, затем написать -
, больше трех символов и т.д. .
#include <string>
#include <iterator>
#include <iostream>
int main(){
std::string input("APPLES");
size_t len = 3;
for (size_t pos = 0; pos < input.length(); pos += len)
std::cout << input.substr(pos, len) << "-";
}
Если вам необходимо изменить существующую строку, вы, вероятно, хотите, чтобы начать вычисления количества черточек, которые вы собираетесь вставить, а затем работать с конца строки обратно в начале, двигаясь каждый персонажа непосредственно к месту назначения. Если вы начинаете с фронта и вставляете дефисы там, где это необходимо, он заканчивается как алгоритм O (N). Работа от конца до начала и перемещение каждого символа непосредственно к месту назначения - O (N).
- 1. Использование Reshape2 для создания новой DataFrame
- 2. Является ли избыточным создание новой строки для подстроки другой строки?
- 3. Использование gotoxy для новой строки?
- 4. Использование GCC для создания новой DLL
- 5. Использование оператора switch для создания новой переменной
- 6. Используйте split для создания новой строки
- 7. Команда Force для создания новой строки
- 8. Использование sed для извлечения подстроки из строки
- 9. Использование подстроки java для форматирования строки
- 10. Как избежать создания новой строки?
- 11. C# Результат для новой строки
- 12. Использование strchr для создания строки
- 13. Использование Curl для создания строки
- 14. Регулярное выражение для части дополнительной подстроки, включая символы новой строки
- 15. Лучший C++ макрос для создания новой области
- 16. Извлечение подстроки из строки C#
- 17. Массив подстроки из строки C#
- 18. SQL: использование переменных в цикле для создания новой таблицы
- 19. Получения подстроки для строки
- 20. Automapper для создания новой строки со многими отношениями
- 21. C# Строка новой строки
- 22. разбор строки в подстроки C#
- 23. Использование onUpgrade() для создания новой таблицы базы данных SQLite Android
- 24. Использование регулярного выражения для извлечения подстроки
- 25. Как напечатать подстроку в Swift без создания новой строки?
- 26. Использование strtok для поиска подстроки
- 27. C мимо новой строки
- 28. Использование командного файла для создания новой таблицы в oracle/sqlplus
- 29. excel macro для создания новой строки для числа diff
- 30. Избегайте создания textNode после новой строки?
Ваш j ++ сделает это, измените его на j + = 3 и удалите j = j + 3 из тела –
Имея оба 'j ++' и 'j = j + 3', это ужасно. Для вашего исправления не запускайте 'j' до конца строки – Bathsheba