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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2023, 15:07   #1
максхи
Пользователь
 
Регистрация: 20.12.2021
Сообщений: 59
По умолчанию Увеличение строки в цикле.

Как увеличивать строку CString во время работы функции?

Код:
CString* tose(double i)
       {int s = 0;
	CString* zac=0;
	CString sem = _T("0123456");
        CString* chce=new    ;
        CString* chdr=new    ;
	double ma;
	double ex = modf(i, &ma);
	int u = (int)ma;
	while (u != 0)
	{
          //увеличение chce
		chce[s] = sem[u % 7];
		s += 1;
		u = u / 7;
	}
	for (int t = s; t >= 0; t--)
		s = 0;
	do {
        //увеличение chdr
		ex = ex * 7;
		ex = modf(ex, &i);
		chdr[s] = sem[(int)i];
		s = s + 1;
	} while ((ex != 0) && (s < 6));
	chce = chce + _T(',');
        zac=chce+chdr;
	if (i < 0)
		zac = '-' + zac;
        //free 
	return (zac);}
максхи вне форума Ответить с цитированием
Старый 24.08.2023, 15:17   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

В прошлой теме отвечали. Выкидывайте new|free и используйте операторы класса.
p51x вне форума Ответить с цитированием
Старый 24.08.2023, 15:36   #3
максхи
Пользователь
 
Регистрация: 20.12.2021
Сообщений: 59
По умолчанию

p51x, а какие? .Format, GetLenght?
максхи вне форума Ответить с цитированием
Старый 24.08.2023, 15:43   #4
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 736
По умолчанию

string не подходит? Просто + к строке и все. А CString, как мы выяснили, это просто Сигнал null- terminated string, т.е. просто массив символов заканчивающиеся 0. Используйте оператор new в таком случае или свои конструкторы классов CString для перевыделения памяти. Там в Студии используется этот CString, у меня-то CodeBlocks.
Cuprum5 вне форума Ответить с цитированием
Старый 24.08.2023, 18:29   #5
максхи
Пользователь
 
Регистрация: 20.12.2021
Сообщений: 59
По умолчанию

Сделал через плюс, всё равно выводит исключение на chce = chce+ sem[u % 7];
и Expression: (iChar >= 0) && (iChar <= GetLength()).
Хотя иногда просто гне грузит.
А ещё если пытаюсь сложить zac и chdr, компилятор пишет:"выражение должно относиться к целочисленному типу или типу перечисления без области видимости".
максхи вне форума Ответить с цитированием
Старый 24.08.2023, 18:58   #6
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 736
По умолчанию

Цитата:
Сообщение от максхи Посмотреть сообщение
Сделал через плюс,
- что это значит? Через C++ и использовали string? Если так, то в прошлой теме я Вам сделал со string.
Cuprum5 вне форума Ответить с цитированием
Старый 24.08.2023, 19:04   #7
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 736
По умолчанию

Оператор + к CString не применяется. strcat попробуйте.
Cuprum5 вне форума Ответить с цитированием
Старый 24.08.2023, 21:40   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Сообщение от максхи Посмотреть сообщение
а какие? .Format, GetLenght?
причем тут они?

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
А CString, как мы выяснили, это просто Сигнал null- terminated string, т.е. просто массив символов заканчивающиеся 0.
А string это что-то другое? Он какую-то магию делает?

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
Используйте оператор new в таком случае или свои конструкторы классов CString для перевыделения памяти.
Не нужны new ему

Цитата:
Сообщение от максхи Посмотреть сообщение
chce = chce+ sem[u % 7];
Где это в коде?

Цитата:
Сообщение от максхи Посмотреть сообщение
и Expression: (iChar >= 0) && (iChar <= GetLength()).
Похоже это из chce[s]. Ну так правильно: не присваивайте еще не выделенному, а просто прибавляйте к строке.

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
- что это значит? Через C++ и использовали string?
Использовал operator + класса CString.

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
Оператор + к CString не применяется.
С какого перепоя?

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
strcat попробуйте.
Накуя?
p51x вне форума Ответить с цитированием
Старый 25.08.2023, 08:20   #9
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 965
По умолчанию

Цитата:
Сообщение от максхи Посмотреть сообщение
CString* tose(double i)
{int s = 0;
....
return (zac);}
полная каша в голове! Учить основы C и C++ срочно, а то дело вообще не пойдёт.

А по теме, если сия грабельная функция предназначена для приписывания к MFC-строке числа double в текстовом виде, то достаточно вызвать AppendFormat

Код:
CString s="abc";
double d=12.34;
s.AppendFormat("%lf",d);
Алексей1153 вне форума Ответить с цитированием
Старый 25.08.2023, 08:23   #10
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 965
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
А CString, как мы выяснили, это просто Сигнал null- terminated string, т.е. просто массив символов заканчивающиеся 0.
нет, это не так. CString - это не массив, это класс. Внутреннее состояние инкапсулировано, там хоть база данных пусть лежит. Но интерфейс класса позволяет получить указатель на внутренний буфер GetString() или operator const char*

к слову, CString использует COW
Алексей1153 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как вектор стал двухмерным. Почему в первом цикле Layer(), а во втором Matrix(i,j); и зачем во втором цикле функцию back() используют? diomed16 Общие вопросы C/C++ 1 01.07.2020 18:03
"увеличение высоты выделенной строки в списке” Glen Софт 0 16.04.2013 12:33
Префиксное увеличение строки(С++) nhr Помощь студентам 0 04.05.2011 20:46
увеличение стека на C++ Alex_FF Помощь студентам 1 16.12.2009 23:57
Как вывести в цикле for ... do строки? ViTYAi2007 Помощь студентам 14 27.03.2008 05:47