Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2

Некорректная работа SubString - в строке лишний символ

06.08.2014, 17:39. Показов 2789. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые, здравствуйте! Никак не пойму что за беда с SubString. Код:
C++
1
2
AnsiString Str="[prob]:nii";
ShowMessage(Str.SubString(Str.Pos("[")+1,Str.Pos("]")-1));
Фактический нужно увидеть текст prob, а код мне по-непонятным причинам выдаёт почему-то prob]. Это как понимать? Или что не так делаю? Подскажите пожалуйста.
Заранее спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.08.2014, 17:39
Ответы с готовыми решениями:

Некорректная работа программы по работе с файлами - добавляется лишний символ
Доброго времени суток. Есть вот такая вот программа. Она работает корректно, за исключением одного но: в конце она добавляет символ 'я'....

Лишний символ в строке
Здравствуйте читающие! Появилась проблема при сравнении строк в QTP на языке VBS. Визуально две строки равны. Но при сравнении их...

лишний символ
есть текст в файле : считываю построчно файл и с помощью echo печатаю его на экране тоже построчно, вот что получается удалял...

13
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.08.2014, 17:43
Для начало стоило бы проверять что возвращаю вызовы ф-ций .Pos() может они ничего не находят.

Добавлено через 2 минуты
Тут есть пример с PosEx()
0
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2
06.08.2014, 18:04  [ТС]
Avazart, Итак сначала проверял, сюда лишний код не стал писать, на самом деле он такой. Код:
C++
1
2
3
4
5
6
7
AnsiString Str="[prob]:prob";
ShowMessage(
String(Str.Pos("["))+" "+
String(Str.Pos("]"))+" "+
String(Str.Length())+" "+
Str.SubString(Str.Pos("[")+1,Str.Pos("]")-1)
);
Сообщение выводит такое: 1 6 6 11 prob].
Pos работает нормально, в PosEx нет нужды. Это SubString что-то халтурит.
0
Native x86
Эксперт Hardware
 Аватар для quwy
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
06.08.2014, 18:13
Второй параметр SubString() -- это длина извлекаемой подстроки, а не индекс последнего символа.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.08.2014, 18:29
Цитата Сообщение от X_Starter_X Посмотреть сообщение
Pos работает нормально, в PosEx нет нужды.
Что за подход к делу такой через ж...?
Попробуй к примеру строку "] [" или "] []" что выдаст Pos() ? Pos() ищет только сначала строки- это кроме всего не оптимально.

Добавлено через 30 секунд
Цитата Сообщение от X_Starter_X Посмотреть сообщение
Это SubString что-то халтурит.
Ну у меня в примере по ссылке не халует ?
0
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2
06.08.2014, 18:39  [ТС]
quwy, Так вот где собака зарыта.
Цитата Сообщение от Avazart Посмотреть сообщение
Попробуй к примеру строку "] [" или "] []"
У меня таких строк нет. Грубо говоря я работаю с ini файлами, но на самом деле это не ini. Вот и вывожу имя секции.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.08.2014, 18:44
Хз но я бы вообще регулярки использовал и не парился.
0
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2
06.08.2014, 19:01  [ТС]
Avazart, Можете привести пример вашего кода для регулярных выражений?
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
06.08.2014, 19:03
Лучший ответ Сообщение было отмечено X_Starter_X как решение

Решение

Попадал на теже грабли.
У SubString второй аргумент это длинна он начало до конца. Поэтому
C++
1
2
AnsiString Str="[prob]:nii";
ShowMessage(Str.SubString(Str.Pos("[")+1,Str.Pos("]") - Str.Pos("[") - 1));
Добавлено через 1 минуту
вот
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.08.2014, 19:22
Как пример - ф-ция парсящая какой-то id (вырвано из проекта)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <System.RegularExpressions.hpp>
//---------------------------------------------------------------------------
String __fastcall ParseSuId(const String AContent)
{
    TRegEx Re("suid=([0-9a-f]+)");  //  suid= какое-то число в hex строке
 
    TMatch M = Re.Match(AContent);
 
    if(M.Success)
    {
       return M.Groups.Item[1].Value;
    }
    else return "";
}
//---------------------------------------------------------------------------
2
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2
06.08.2014, 21:31  [ТС]
DeadHipo, Второй аргумент длина... Лучше было бы так как мы думали, а то неудобно сделано.
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
06.08.2014, 22:00
X_Starter_X, Да, конечно, с одной стороны это выглядит не удобно, но свои плюсы тоже есть. Ты всегда можешь взять String.Lengh() и вычесть из неё начало твоего символа и ты получишь всё до конца начиная от указанного символа. Это применимо к строкам у которых в конце нет определённого символа.
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
07.08.2014, 11:46
Цитата Сообщение от DeadHipo Посмотреть сообщение
Ты всегда можешь взять String.Lengh() и вычесть из неё начало твоего символа и ты получишь всё до конца начиная от указанного символа.
Если бы второй параметр был символом конца строки, то эта фраза звучала бы так: Ты всегда можешь взять String.Length() - это и будет индекс последнего символа строки, из которого ни чего вычитать не надо. Таким образом легко можно получить все от указанного символа до конца, указав вместо конечного символа длину строки. Не знаю, почему Substring принмает длину подстркои, а не конечный символ, но во все знакомые мне функции Substring из разных языков программирвоания передается именно длина.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
07.08.2014, 22:42
Передавать в функцию по работе с подмножеством позицию и объем вовлекаемой информации - наиболее универсальное решение. И я не очень хорошо понимаю, зачем было все это мусолить целый вечер вместо того, чтобы за минуту все выяснить в справке...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.08.2014, 22:42
Помогаю со студенческими работами здесь

QLineEdit Лишний символ
Доброе утро. Возникла некоторая проблема. В дизайнере добавил на форму 2 объекта LineEdit и PushButton. void...

Появляется лишний символ
Всем доброго времени суток. Друзья, такая ситуация: AnsiString str=&quot;&quot;; ifstream in(&quot;1.txt&quot;); if(!in){ ShowMessage(&quot;не...

Из файла считывается лишний символ
Разбираю система ввода-вывод C. При чтении из текстового файла содержащего символы &quot;123&quot; и выводе файла в консоль, пока не...

Лишний символ при компиляции
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;stdio.h&gt; #include &lt;cstring&gt; #include &lt;conio.h&gt; int zamena(char c); using...

Getch() выдает лишний символ
Доброго, после обновлении возникли проблемы с функции getch(), которая возвращает нажатый символ. Помимо нажатого символа, _getch()...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru