Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 1
Регистрация: 12.08.2015
Сообщений: 125
1

Логическое отрицание и тип данных AnsiString

27.08.2015, 15:49. Показов 1271. Ответов 16
Метки нет (Все метки)

Здравствуйте,

Вопрос простой, но для меня пока сложный.
В какой лучше тип перевести строку AnsiString, чтоб написать условие типа
C++
1
if(!Ftype) {//Что-то делаю}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2015, 15:49
Ответы с готовыми решениями:

Тип AnsiString
Доброе время суток. Что то не получается вот это задание. В символьной строке, содержащей не более...

Как перевести текст из AnsiString (в формате UTF8) в AnsiString формата Windows-1251?
Поиск по форуму не решил текущую проблему: 1. Есть текст в формате UTF-8 в величине: AnsiString...

Загрузка данных в AnsiString из файла
Помогите пожалуйста. Сам даже не представляю, как такой можно осуществить. У меня имеется файл:...

Назначение типа данных AnsiString
Можете доступно объяснить что такое AnsiString. И почему в Builder в StringGrid используется он?

16
Почетный модератор
Эксперт С++
5845 / 2855 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
27.08.2015, 15:58 2
Цитата Сообщение от avpdnepr Посмотреть сообщение
В какой лучше тип перевести строку AnsiString, чтоб написать условие типа
Если вы хотите проверять строку на пустоту, то лучше всего вот так:
C++
1
2
String str;
if( str.IsEmpty ){}
0
724 / 516 / 128
Регистрация: 31.05.2013
Сообщений: 2,844
Записей в блоге: 3
27.08.2015, 16:01 3
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Если вы хотите проверять строку на пустоту, то лучше всего вот так:
Немного добавлю, делал тест в несколько миллионов строк и проверял двумя методами на пустоту
C++
1
if( str.IsEmpty )
и
C++
1
if( str.Length() ==0 )
В первом вариант прирост почти x2
1
1 / 1 / 1
Регистрация: 12.08.2015
Сообщений: 125
27.08.2015, 16:32  [ТС] 4
А если у меня массив в переменной?
0
Почетный модератор
Эксперт С++
5845 / 2855 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
27.08.2015, 16:43 5
Цитата Сообщение от avpdnepr Посмотреть сообщение
А если у меня массив в переменной?
Тогда все хорошо.
0
1 / 1 / 1
Регистрация: 12.08.2015
Сообщений: 125
27.08.2015, 18:06  [ТС] 6
Скажите, а почему не пропускает

C++
1
if(PoleStructurW[0][zzz]->Length() == 0)
[C++ Error] DBComparisonOne.cpp(278): E2288 Pointer to structure required on left side of -> or ->*
0
4952 / 2416 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
27.08.2015, 18:58 7
А так?
C++
1
if(PoleStructurW[0][zzz].Length() == 0)
1
1 / 1 / 1
Регистрация: 12.08.2015
Сообщений: 125
27.08.2015, 19:08  [ТС] 8
Спасибо получилось, тогда следующий вопрос. Если можно

Почему не останавливается цикл, вроде правильно написал
C++
1
2
3
4
if(PoleStructurW[0][zzz].IsEmpty())
{
    break;
}
0
4952 / 2416 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
27.08.2015, 19:14 9
Покажи как выглядит твой цикл?
0
1 / 1 / 1
Регистрация: 12.08.2015
Сообщений: 125
27.08.2015, 21:29  [ТС] 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
for(int zz = 0; zz < 2; zz++)
       {
          if(PoleStructur[3][z] == PoleStructurW[3][zz]
          && PoleStructur[0][z] != PoleStructurW[0][zz])
          {
              for(int zzz = 0; zzz < 300; zzz++)
              {
                  if(PoleStructur[0][z] == PoleStructurW[0][zzz])
                  {
                       pole = 1;
                  }
                  if(PoleStructur[0][z] != PoleStructurW[0][zzz] && pole == 0)
                  {
                       MemoE->Lines->Add(PoleStructur[0][z]);
                       Memo1E->Lines->Add(PoleStructurW[0][zzz]);
                  }
 
                  if(PoleStructurW[0][zzz].IsEmpty())
                  {
                      break;
                  }
              }
 
              AlterTable[0][q] = PoleStructur[0][z];
              AlterTable[1][q] = PoleStructur[1][z];
              AlterTable[2][q] = PoleStructur[2][z];
 
              // Ïîòîì óäàëèòü
              MemoE->Lines->Add(PoleStructur[0][z]);
              Memo1E->Lines->Add(PoleStructurW[0][z]);
              //Memo2E->Lines->Add(z);
              //z1 = 300;
 
 
              q++;
          }
 
          if(PoleStructurW[0][zz].IsEmpty())
          {
            break;
          }
}
Добавлено через 10 минут
В 18 строке вместо zz исправил zzz.

Программа компилируется, но не запускается

Добавлено через 1 час 29 минут
Да, сразу хотелось бы знать можно использовать какой-нибудь метод, кроме isNull

Добавлено через 25 минут
Да только поздним вечером понял, что использовать isEmpty не получится. Этот метод проверяет пуст ли весь массив
0
kodv
28.08.2015, 04:47
  #11

Не по теме:

Цитата Сообщение от Dinkin Посмотреть сообщение
Немного добавлю, делал тест в несколько миллионов строк и проверял двумя методами на пустоту Код C++Выделить код1
if( str.IsEmpty )и Код C++Выделить код1
if( str.Length() ==0 )В первом вариант прирост почти x2
Хм ... Странно ... В файле dstring.h такой код:
C++
1
2
3
4
  __DSTRING_INLINE int __fastcall AnsiString::Length() const
  {
    return (Data)? GetRec().length : 0;
  }
C++
1
    bool __fastcall IsEmpty() const { return Data == NULL; }
Неужели за счет inline'а Length может быстрее, чем IsEmpty работать?

Добавлено через 2 минуты
Хотя сейчас перечитал и ... Может вы именно и имели ввиду, что первый вариант быстрее ...

0
1 / 1 / 1
Регистрация: 12.08.2015
Сообщений: 125
28.08.2015, 08:36  [ТС] 12
Я не совсем понял, как мне использовать ваш пример
0
1445 / 1118 / 344
Регистрация: 11.04.2011
Сообщений: 2,615
28.08.2015, 08:43 13
avpdnepr, я не спроста ответ в теги оффтопа поместил. Это было к вопросу о производительности, которая была упомянута в третьем посте. К вашей вопросу это имеет мало отношения.
0
1 / 1 / 1
Регистрация: 12.08.2015
Сообщений: 125
28.08.2015, 09:26  [ТС] 14
Я нашёл сегодня методы c_str() и data(). Но они у меня тоже отказываются работать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for(int zzz = 0; zzz < 300; zzz++)
              {
                  if(PoleStructur[0][z] == PoleStructurW[0][zzz])
                  {
                       pole = 1;
                  }
                  if(zzz = 299 && PoleStructur[0][z] != PoleStructurW[0][zzz] && pole == 0)
                  {
                       MemoE->Lines->Add(PoleStructur[0][z]);
                       Memo1E->Lines->Add(PoleStructurW[0][zzz]);
                  }
 
                 if(PoleStructurW[0][zzz].c_str()  == "")
                  {
                      break;
                  }
              }
0
Практикантроп
4703 / 2614 / 506
Регистрация: 23.09.2011
Сообщений: 5,629
28.08.2015, 09:42 15
Цитата Сообщение от Dinkin Посмотреть сообщение
Немного добавлю, делал тест в несколько миллионов строк и проверял двумя методами на пустоту
Dinkin, добавь еще немного, чтоб не экспериментировать с миллионом строк... - прирост чего: времени выполнения или скорости обработки? Другими словами - какой из вариантов быстрее?
0
724 / 516 / 128
Регистрация: 31.05.2013
Сообщений: 2,844
Записей в блоге: 3
28.08.2015, 10:26 16
nick42, kodv,
Взял ~ 2 миллион строк, с рандомными символами, из них половина пустых строк и прогнал двумя методами (раз 10 что бы точно увидеть результат).
Вариант в IsEmpty() обработался в два раз быстрее. Так же делал альфа замеры на нагрузку процессора, c IsEmpty() процессору ~20% легче считать (это если брать Intel).
0
Эксперт С++
8297 / 6128 / 613
Регистрация: 10.12.2010
Сообщений: 28,659
Записей в блоге: 30
03.09.2015, 21:55 17
C++
1
GetRec().length
вероятно и вызывает эту разницу.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2015, 21:55

Логическое отрицание
Доброго времени суток. из за пропущеного занятия, не могу одну вещь разобрать. Что означает...

Есть ли экономный способ осуществить логическое отрицание?
Здравствуйте. Есть ли более экономный способ осуществить логическое отрицание? Уж очень не красиво...

Отрицание xy это значит умножение х на у или отрицание х + отрицание у
отрицание xy это значит умножение х на у или отрицание х + отрицание у,в таблице истинности незнаю...

Даны числа в 16-ричной системе счисления: сложение, вычитание, умножение, деление, логическое отрицание
1 Даны числа а=9531h и b=A78Dh (числа в 16-ричном системе счисления). Нужно выполнить над ними:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru