Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
1

Строку разбить на две подстроки

07.02.2010, 13:11. Показов 1979. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
в общем есть строка, ее нужно разбить на две подстроки первая длиной Х символов,если Х попадает на слово то это слово отнести ко второй подстроке ну строку ввести не проблема как перенаправить указатель на Х-ый символ в строке и с помощью какого оператора можно, или еще как нить, можно разбить строку на подстроки??? очень хочется видеть часть кода от указателя Х до вывода на экран двух конечных подстрок и обязательно с объяснениями что? как? да почему? !!!! могу чтоб было проще и потом небыло нестыковок скинуть кусок кода
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
#include <iostream.h>
#include <string.h>
#include <stdio.h>
int main()
{
char st[100];
int n = 0,x;
char *ch = NULL;
tmp[0] = '\0';
cout << "Vvedite x: ";
cin >> x;
puts("Vvedite stroku: ");
gets(st);
 
 
 
 
 
 
 
 
 
 
return 0;
}
заранее спасибо!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.02.2010, 13:11
Ответы с готовыми решениями:

Разбить исходную строку на две подстроки
Здравствуйте форумчане, пытаюсь решить задание с использованием строк, но не выходит. Учителя...

Разбить исходную строку на две подстроки
Дана строка, состоящая из слов, разделенных пробелами. Разбить исходную строку на две подстроки,...

Разбить исходную строку на две подстроки
Решите пожалуйста) Дана строка символов, состоящая из произвольного текста на английском языке,...

Разбить исходную строку на две подстроки
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены...

10
5 / 5 / 1
Регистрация: 06.02.2010
Сообщений: 33
07.02.2010, 15:56 2
Выдирать подстркоку для char строк можно с посощью функции substr();
А что касаемо что как и почему, то это тебе в интернете никто никогда не подскажет. Поверь моему опыту. Так что лучше чиай книги.

Например бри работу со строками очень удобно пользоваться итераторами, к томуже в стандартной библиотеки шаблонов С++ есть очень много функций для работы со строками. Очень рекомендую изучить стандартную библиотеку шаблнов(STL)
1
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
07.02.2010, 20:12  [ТС] 3
текст ни о чем...единственное так это "substr" но! как его применить??? хоть бы пару кусочков кодов кк его применяют(((
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
07.02.2010, 20:22 4
напиши в каком виде ты хочешь получить эти "две подстроки", тогда будет понятней. у тебя строка, как я понял, лежит в массиве st, длину имеет максимум 99 символов (для концевого нуля один символ нужен).

просто найти смещение символа в данной строке, который будет первым во второй подстроке, или ты забыл для "подстрок" память определить?
0
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
09.02.2010, 14:28  [ТС] 5
Цитата Сообщение от novi4ok Посмотреть сообщение
напиши в каком виде ты хочешь получить эти "две подстроки", тогда будет понятней. у тебя строка, как я понял, лежит в массиве st, длину имеет максимум 99 символов (для концевого нуля один символ нужен).

просто найти смещение символа в данной строке, который будет первым во второй подстроке, или ты забыл для "подстрок" память определить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream.h>
#include <string.h>
#include <stdio.h>
int main()
{
char st[100], pst1[100], pst2[100];
int n = 0,x;
char *ch = NULL;
tmp[0] = '\0';
cout << "Vvedite x: ";
cin >> x;
puts("Vvedite stroku: ");
gets(st);
 return 0;
}
хочу я вот что
ввести строку...пусть до 99ти символов!(я вкурсах про ноль на конце!)потом ну или до ввода строки ввести число(длину символов первой строки)ну и чтобы эта введенная строка разбилась на 2 подстроки, если на этот символ попадает слово то отнести его ко второй строке.....так понятно? могу еще написать пример
строка:

Место клизмы изменить нельзя

допустим ввожу число 15

Место клизмы изменить нельзя

и чтобы после выполнения проги получилось так:

Место клизмы
изменить нельзя
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.02.2010, 18:38 6
почщи, пару ошибок должно быть. или нет?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    strcpy (st, "mesto klismy ismenit nelsja");
    int size = ::strlen (st);
    if (size > 15){
        while (n-- > 0 && *(st+n) != ' '){
            ;
        }
        if (n > 0){
            ::memcpy (pst1, st, n);
            *(pst1+n) = '\0';
            ::strcpy (pst2, st+n+sizeof (' '));
        } else {
            // all in the 1st or in the 2nd part?
            ;
        }
    } else {
        // all in the 1st or in the 2nd part?
        ;
    }
1
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
09.02.2010, 21:30  [ТС] 7
спс огромное...но мне строку и ЧИСЛО(15...или какое либо другое) нужно вводить с клавиатуры
должно быть что-то вроде этого
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
#include <iostream.h>
#include <string.h>
#include <stdio.h>
int main()
{
char st[100], tmp[100], pst1[100], pst2[100];
int n;
char *ch = NULL;
tmp[0] = '\0';
cout << "Vvedite n: ";
cin >> n;
puts("Vvedite stroku: ");
gets(st);
 
    int size = ::strlen (st);
    if (size > n){
        while (n-- > 0 && *(st+n) != ' '){
            ;
        }
        if (n > 0){
            ::memcpy (pst1, st, n);
            *(pst1+n) = '\0';
            ::strcpy (pst2, st+n+sizeof (' '));
        } else {
            // all in the 1st or in the 2nd part?
            ;
        }
    } else {
        // all in the 1st or in the 2nd part?
        ;
    }
 
 
return 0;
}
НО хоть ошибок и нет строка вводится, число х вводится.. но нифига не выполняется....((((
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.02.2010, 22:29 8
я не имел ввиду ошибки компилятора - эти проще всего исправить.

а что должно выполниться? вывод этих "полустрок" в конце? ну допиши в конце как там это пишут:

C++
1
2
cout << "первая часть: " << eol << pst1 << eol;
cout << "вторая часть: " << eol << pst1 << eol;
1
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
10.02.2010, 10:35  [ТС] 9
кароче пасибки огромное!!!)))

вот правильный вариант
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
#include <iostream.h>
#include <string.h>
#include <stdio.h>
int main()
{
char st[100], tmp[100], pst1[100], pst2[100];
int n = 0;
char *ch = NULL;
tmp[0] = '\0';
cout << "Vvedite n: ";
cin >> n;
puts("Vvedite stroku: ");
gets(st);
 
    int size = ::strlen (st);
    if (size > n){
        while (n-- > 0 && *(st+n) != ' '){
            ;
        }
        if (n > 0){
            ::memcpy (pst1, st, n);
            *(pst1+n) = '\0';
            ::strcpy (pst2, st+n+sizeof (' '));
        } else {
            // all in the 1st or in the 2nd part?
            ;
        }
    } else {
        // all in the 1st or in the 2nd part?
        ;
    }
 
cout << "первая часть: " <<pst1<< endl;
cout << "вторая часть: " <<pst2<< endl;
 
return 0;
}
токак плиз можно еще на "пальцах" объяснить эту часть кода:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int size = ::strlen (st);
    if (size > n){
        while (n-- > 0 && *(st+n) != ' '){
            ;
        }
        if (n > 0){
            ::memcpy (pst1, st, n);
            *(pst1+n) = '\0';
            ::strcpy (pst2, st+n+sizeof (' '));
        } else {
            // all in the 1st or in the 2nd part?
            ;
        }
    } else {
        // all in the 1st or in the 2nd part?
        ;
    }
плииииззззз)))))
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.02.2010, 12:56 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
int size = ::strlen (st); // реальная длина строки (количество символов до символа-нуля)
 
        if (size > n){ // если позиция - внутри строки, а не за ее пределами
                while (n-- > 0 && *(st+n) != ' '){ // "идти" влево, пока позиция n не укажет на пробел (' '), или пока не придем в начало строки
                        ;
                }
                if (n > 0){ // если нашли пробел посреди строки
                        ::memcpy (pst1, st, n); // скопировать n cимволов в первую подстроку
                        *(pst1+n) = '\0'; // записать терпинирующий нуль-символ
                        ::strcpy (pst2, st+n+sizeof (' ')); // скопировать во вторую подстроку все начиная с первого символа после найденного пробела
                } else {
                        // all in the 1st or in the 2nd part?
                        ; // здесь нужно бы переписать всю исходную строку или в первую подстроку, или во вторую. скорее во вторую.  думал, сам догадаешься сделать, написал только комментарии. а ты - лентяй.
::strcpy (pst2, st);
// а в первую записать нуль-строку:
*pst1 = '\0';
                }
        } else {
                // all in the 1st or in the 2nd part?
// указана позиция за пределами (правее) строки. наверное, нужно всю строку записать в первую полустроку, а во вторую - нуль-строку
::strcpy (pst1, st);
// а в первую записать нуль-строку.
*pst2 = '\0';
                ;
        }
1
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
10.02.2010, 16:18  [ТС] 11
Цитата Сообщение от novi4ok Посмотреть сообщение
а ты - лентяй.
есть немного)))))огромное человеческое пасибо!)
0
10.02.2010, 16:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.02.2010, 16:18
Помогаю со студенческими работами здесь

Разбить исходную строку на две подстроки
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены...

Разбить исходную строку на две подстроки
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены...

нужно разбить исходную строку на две подстроки , причём первая длинной k
Вообщем нужно разбить исходную строку на две подстроки , причём первая длинной k. Вот код который...

Разбить исходную строку на две подстроки, причем первая длиной k символов
Дана строка, состоящая из слов, разделенных пробелами. Разбить исходную строку на две ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru