Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2022, 22:19   #1
Миша2003
Пользователь
 
Регистрация: 07.03.2022
Сообщений: 11
По умолчанию Какие-то проблемы со строками, код прилагается (С++)

Всем привет. Пишу зашифровку текстового файла. Столкнулся с проблемой, что программа перестала работать. Есть строка, если в ней меньше 35+- символов то все работает, если больше то пишет ошибку. Помогите пожалуйста. Заранее спасибо!
Сам компилятор вроде как указывает на 12 строку, что нельзя преобразовать size_t в int или что-то такое.

Код:
#include <iostream>
#include <string>
#include <algorithm>
#include <conio.h>
#include <cstring>
using namespace std;

string translateCode(string texton)
{
texton.erase(remove(texton.begin(), texton.end(), ' '), texton.end());
string arr2;
auto count = texton.length(); //<<------ 12 строка
int a = count / 4, b = a / 3, c = b / 2, d = c / 1;

for (int i = 0; i < 100; i++)
{
while (a != 0)
{
arr2.push_back(texton[2]);
arr2.push_back(texton[1]);
arr2.push_back(texton[3]);
arr2.push_back(texton[0]);
texton.erase(0, 4);
a--;
}
while (b != 0)
{
arr2.push_back(texton[2]);
arr2.push_back(texton[1]);
arr2.push_back(texton[0]);
arr2.push_back(' ');
texton.erase(0, 3);
b--;
}
while (c != 0)
{
arr2.push_back(texton[1]);
arr2.push_back(texton[0]);
arr2.push_back(' ');
arr2.push_back(' ');
texton.erase(0, 2);
c--;
}
while (d != 0)
{

arr2.push_back(texton[0]);
arr2.push_back(' ');
arr2.push_back(' ');
arr2.push_back(' ');
texton.erase(0, 1);
d--;
}
}
return arr2;
}


int main() {
string arr1 = "abcdefgdgbgefoiah235241hoedvdfboijafuh"; // если задать 15-20 символов все работает, если больше - нет.
cout << translateCode(arr1);


return 0;
}

Последний раз редактировалось BDA; 05.05.2022 в 22:41.
Миша2003 вне форума Ответить с цитированием
Старый 05.05.2022, 22:43   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от Миша2003 Посмотреть сообщение
Код:
d = c / 1;
Это вообще что? (вредный совет: попробуйте делить на 0)
Цитата:
Сообщение от Миша2003 Посмотреть сообщение
Код:
while (a != 0)
{
arr2.push_back(texton[2]);
arr2.push_back(texton[1]);
arr2.push_back(texton[3]);
arr2.push_back(texton[0]);
texton.erase(0, 4);
a--;
}
А на втором проходе внешнего цикла шифровать строку не надо? (подсказка: a, b, c и d будут равны 0)
macomics вне форума Ответить с цитированием
Старый 06.05.2022, 03:37   #3
Миша2003
Пользователь
 
Регистрация: 07.03.2022
Сообщений: 11
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Это вообще что? (вредный совет: попробуйте делить на 0)
Элементы меняются местами цепочкой из 4 элементов. Пока строка состоит из 4+ элементов, будет использоваться while (a != 0), когда элементов станет меньше он пойдет дальше по списку (b, c, d). d делю на 1 на всякий случай, сам не до конца понимаю зачем оно надо, но пусть лучше будет

А на втором проходе внешнего цикла шифровать строку не надо? (подсказка: a, b, c и d будут равны 0)
Я не до конца разобрался, что нужно "впихнуть" во второй аргумент оператора for, чтобы все работало правильно. Поэтому сделал так. Так как идет присваивание эл-ов из одной строки в другую, только на разных местах, то в конце концов первоначальная строка станет нулевой. Следовательно второй строке не откуда будет брать символы и цикл просто закончится. Нули впихиваться не будут, все сработает так как надо (по идее).
Миша2003 вне форума Ответить с цитированием
Старый 06.05.2022, 03:47   #4
Миша2003
Пользователь
 
Регистрация: 07.03.2022
Сообщений: 11
По умолчанию

Решил проверить выполнение программы в онлайн компиляторе, все работает
Не понимаю тогда в чем проблема, в VS 2022 компилятор ругается, а запуская на сайте все работает отлично..
Миша2003 вне форума Ответить с цитированием
Старый 06.05.2022, 04:20   #5
Миша2003
Пользователь
 
Регистрация: 07.03.2022
Сообщений: 11
По умолчанию

Все, разобрался. Проблема была в инициализации int a = count / 4, b = a / 3, c = b / 2, d = c / 1;
Просто неправильно инициализировал.
К примеру если длина строки 11, то а = 2, b = 0, c = 0, d = 0, в сумме (8), а 3 символа потерялись
Должно быть так int a = count / 4, b = (count % a) / 3, c = (count % a) / 2, d = (count % a) / 1;
Тогда все будет работать, длина строки 10, а = 2, b = 0(т.к 2 / 3 = 0), c = 1. Ну, думаю понятно.
Миша2003 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написание файлового менеджера: проблемы со строкой поиска VolodyaBuzin C++ Builder 1 05.05.2019 07:56
Проблемы с командной строкой MS DOS lizka6011997 Помощь студентам 7 19.11.2013 15:34
Проблемы со строкой WESTnik Общие вопросы C/C++ 3 19.03.2010 20:04
Какие проблемы могут быть с цифровой удостоверением? ann200 Microsoft Office Access 2 07.10.2009 17:52
Проблемы со строкой и подсказкой bill Помощь студентам 1 29.04.2007 16:03