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

Разделить строку после 30 символов и пробела

07.04.2014, 16:23. Показов 1290. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мучаюсь весь день, мне нужно вводимую строку разбить на две, если она превысит 50 символов, но будет красивее, если 30 символов и до ближайщего пробела. Что я имею:
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
String text3 = Edit3->Text;
int length, cnt;
cnt=text3.Length();
mark = "obr2";
bm = active_doc.OlePropertyGet("Bookmarks");
try
{
bm.OleFunction("Item",mark.c_str()).OleProcedure("select");
}
catch(...)
{
Application->MessageBox("Nain!",
" ",MB_OK+MB_ICONERROR);
CloseDoc();
}
if (cnt>60)
{
AnsiString str;
str = text3;
String p1,p2;
str = str.SubString(1,26);
AnsiString str2;
str2 = text3;
str2 = str2.SubString(21,55);
my_word.OlePropertyGet("Selection").OleProcedure("TypeText",str.c_str());
mark = "obr";
bm = active_doc.OlePropertyGet("Bookmarks");
try
{
bm.OleFunction("Item",mark.c_str()).OleProcedure("select");
}
catch(...)
{
CloseDoc();
}
my_word.OlePropertyGet("Selection").OleProcedure("TypeText",str2.c_str());
 
}
else
{
my_word.OlePropertyGet("Selection").OleProcedure("TypeText",text3.c_str());
}
Код вроде бы и рабочий, но мне все же нужно, чтобы во время пробела так делалось. Если кто-то поможет, буду благодарен.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.04.2014, 16:23
Ответы с готовыми решениями:

Разделить строку после некоторого кол-ва символов
Дана строка типа: мамасестра Как между мама и сестра вставить пробел, если известно кол-во символов первого слова..(в нашем случае 4)

Разделить строку на подстроки с разделителем в три пробела
Привет! Ребят, помогите из строк удалить часть строки. Строки имеют такой вид: rrreree1233 1 fsdfsdfd 1233 4433увава 86544 ...

Считывание символов до пробела и после
Здравствуйте. Считываю цифры с помощью функции gets_s(например 3 11). Подскажите как сделать,чтобы цифы до пробелы приравнялись допустим...

5
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
07.04.2014, 16:51
Лучший ответ Сообщение было отмечено specinc как решение

Решение

ну подумайте на таким алгоритмом....только он не гибкий (то есть строку в 150 символов не разобьет на 3 строки)
Но его легко переделать под любую реализацию =)
пока что как то так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Edit1->Text.Length()>50)
{
for (int i=50; i>0; i--)
{
if (Edit1->Text[i]==' ')
{
Memo2->Lines->Add(Edit1->Text.SubString(0,i));
Memo2->Lines->Add(Edit1->Text.SubString(i+1,Edit1->Text.Length())) ;
break;
}
}
}
}
ах да если именно после 30 символов и пробела то

C++
1
for (int i=50; i>30; i--)
Миниатюры
Разделить строку после 30 символов и пробела  
1
4 / 4 / 2
Регистрация: 12.09.2012
Сообщений: 66
07.04.2014, 16:57
Если правильно понял, можно так
C++
1
2
3
4
5
6
7
AnsiString str,str2,str3;
str = "Текст30ипробел иещётекст";
if (str.AnsiPos(" "))
{
    str2 = str.SubString((str.AnsiPos(" ")+1),str.Length());
    str3 = str.SubString(1,str.AnsiPos(" ")-1);
}
1
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
07.04.2014, 18:23
SplaTs, но Ваш алгоритм не так гибок как мой :3
ведь он на первом же пробеле, разобьет строку
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
08.04.2014, 10:11
demon_7, просто наблюдение:
так почитабельнее
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Edit1->Text.Length()>50)
  {
    for (int i=50; i>0; i--)
      {
      if (Edit1->Text[i]==' ')
        {
        Memo2->Lines->Add(Edit1->Text.SubString(0,i));
        Memo2->Lines->Add(Edit1->Text.SubString(i+1,Edit1->Text.Length())) ;
        break;
      }
    }
  }
}


А вообще лучше бы было, допустим, брать каждую строку в Memo и в нее конкатенировать все слова из искомой строки, при этом постоянно проверяя длину текущей строки Memo плюс еще одно слово на перебор максимума.
Хотя так и медленнее будет.
0
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 11
08.04.2014, 13:39  [ТС]
demon_7, спасибо, сделал вот так:
C++ (Qt)
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
43
44
int length;
AnsiString text3;
text3=Edit3->Text;
mark = "obr2";
bm = active_doc.OlePropertyGet("Bookmarks");
try
{
bm.OleFunction("Item",mark.c_str()).OleProcedure("select");
}
catch(...)
{
Application->MessageBox("Íåò òàêîé çàêëàäêè!",
"Îøèáêà",MB_OK+MB_ICONERROR);
CloseDoc();
}
if (Edit3->Text.Length()>40)
{
for (int i=40; i>0; i--)
{
if (Edit3->Text[i]==' ')
{
AnsiString str, str2;
str = Edit3->Text.SubString(0,i);
my_word.OlePropertyGet("Selection").OleProcedure("TypeText",str.c_str());
str2=Edit3->Text.SubString(i+1,Edit1->Text.Length());
mark = "obr";
bm = active_doc.OlePropertyGet("Bookmarks");
try
{
bm.OleFunction("Item",mark.c_str()).OleProcedure("select");
}
catch(...)
{
CloseDoc();
}
my_word.OlePropertyGet("Selection").OleProcedure("TypeText",str2.c_str());
break;
}
}
}
else
{
my_word.OlePropertyGet("Selection").OleProcedure("TypeText",text3.c_str());
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2014, 13:39
Помогаю со студенческими работами здесь

Вставка пробела в строку через каждые пять символов
День добрый! Помогите вставить пробел в каждые 5 символов, изначально в строке нет ни одного пробела, только буквы. Например в строке...

считать строку после пробела
здравствуйте подскажите как считать строку после пробела #include <iostream> #include <string> using namespace std; int...

Вывести строку после пробела
Здравствуйте. Хочу ввести строку, найти в ней первый пробел и вывести новую строку начиная с пробела. Ну например, ввожу: list file, а...

Как запретить ввод в строку всех символов, кроме 0, 1 и пробела?
как запретить ввод в строку всех символов, кроме 0, 1 и пробела

Добавление пробела в EditText после двух символов
нужно, чтобы при вводе в EditText, после каждого введенного байта, автоматически добавлялся пробел, я в принципе это сделал, но пропала...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru