Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lexa_Okatow
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 22
#1

нужно разбить исходную строку на две подстроки , причём первая длинной k - C++

20.11.2013, 21:13. Просмотров 857. Ответов 13
Метки нет (Все метки)

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream.h>
#include <stdio.h>
#include <string.h>
 
void main(void)
{
    char str[20]="small programm",str1[30]={0},str2[30]={0},k;
    cout<<"Vvedite k:";
    cin>>k;
    while(str[k]!= ' ' && k>0)
        k--;
    strncpy(str1,str,k);
    strcpy(str2,str+k);
    cout<<"Pervaya chast: "<<str1<<endl<<"Ostavsheyasa: "<<str2<<endl;
 
}
У меня почему то разбивает строку на small и на programm , хоть и ввожу различное значение k. не могу понять почему. и мне не очень понятна вот эта часть кода  :
 
while(str[k]!= ' ' && k>0)
        k--;
Помогите сделать так , что бы работало, и если можно то объясните.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2013, 21:13     нужно разбить исходную строку на две подстроки , причём первая длинной k
Посмотрите здесь:

Мне надо сделать поиск последнего вхождения подстроки s1 в строку s(с функцией LastPos, не strstr). В этом коде просто вхождение подстроки в строку. C++
Нужно произвести считывание пути к файлу с клавиатуры. Причём сделать это в конструкторе. Всё остальное корректно работает. C++
C++ Разбить строку string на подстроки
C++ Разделить строку на две подстроки.
C++ Нужно найти максимальные и минимальные числа в массиве, причём кол-во массивов задаётся пользователем
Написать функцию, которая формирует строку, состоящую только из цифр, входящих в исходную строку C++
C++ Определить длину самой длинной подстроки из подряд стоящих букв «е»
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,995
20.11.2013, 21:19     нужно разбить исходную строку на две подстроки , причём первая длинной k #2
а код писали вы?

Цикл выполняется пока значение str[k] не является пробелом и(логическая и) к больше 0, в конце цикла счётчик к уменьшается на 1.
C++
1
2
while(str[k]!= ' ' && k>0)
k--;
Добавлено через 1 минуту
а есчо у вас к какбы символ...
int k; объявите...
zss
Модератор
Эксперт С++
6242 / 5845 / 1891
Регистрация: 18.12.2011
Сообщений: 14,972
Завершенные тесты: 1
20.11.2013, 21:21     нужно разбить исходную строку на две подстроки , причём первая длинной k #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(void)
{
     char str[20]="small programm",str1[30]={0},str2[30]={0};
     int k,i;
     cout<<"Vvedite k:";
     cin>>k;
     int L=strlen(str);
     for(int i=0;i<k&& i<L;i++) // Копируем k символов (но не больше длины строки)
                   str1[i]=str[i];
     str[i]=0;  // терминальный ноль
     if(k<L)
         strcpy(str2,str+k); // копируем остаток строки
     cout<<"Pervaya chast: "<<str1<<endl<<"Ostavsheyasa: "<<str2<<endl;
     return 0;
}
Lexa_Okatow
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 22
20.11.2013, 21:24  [ТС]     нужно разбить исходную строку на две подстроки , причём первая длинной k #4
Цитата Сообщение от dzrkot Посмотреть сообщение
а код писали вы?

Цикл выполняется пока значение str[k] не является пробелом и(логическая и) к больше 0, в конце цикла счётчик к уменьшается на 1.
C++
1
2
while(str[k]!= ' ' && k>0)
k--;
Добавлено через 1 минуту
а есчо у вас к какбы символ...
int k; объявите...

делал по примеру.Мне всё понятно,кроме цикла(было). а как мне сделать что бы в первой строке (str1) выводилось k элементов?
kufl
20.11.2013, 21:25
  #5

Не по теме:

вот что я написал, но не не очень понятна эта часть кода)))

dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,995
20.11.2013, 21:33     нужно разбить исходную строку на две подстроки , причём первая длинной k #6
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(void)
{
     char str[20]="small programm",str1[30]={0},str2[30]={0};
     int k,i;
     cout<<"Vvedite k:";
     cin>>k;
     int L=strlen(str);
     for(int i=0;i<k&& i<L;i++) // Копируем k символов (но не больше длины строки)
                   str1[i]=str[i];
     str[i]=0;  // терминальный ноль
     if(k<L)
         strcpy(str2,str+k); // копируем остаток строки
     cout<<"Pervaya chast: "<<str1<<endl<<"Ostavsheyasa: "<<str2<<endl;
     return 0;
}
увидел у вас ошибку и подправил)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cstdio>
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
     char str[20]="small programm", str1[30]={0}, str2[30]={0};
     int k,i;
     cout<<"Vvedite k:";
     cin>>k;
 
     int L=strlen(str);
     for(i=0;i<k;i++) // Копируем k символов (но не больше длины строки)
     str1[i]=str[i];
     str1[i+1]='\0';  // терминальный ноль
        if(k<L)
        strcpy(str2,str+k); // копируем остаток строки
     cout<<"Pervaya chast: "<<str1<<endl<<"Ostavsheyasa: "<<str2<<endl;
     return 0;
}
kufl
1 / 1 / 0
Регистрация: 21.10.2013
Сообщений: 15
20.11.2013, 21:35     нужно разбить исходную строку на две подстроки , причём первая длинной k #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main()
{
    char str[20]="small programm", str1[30]={0}, str2[30]={0};
    int k;
 
    cout<<"Vvedite k:";
    cin>>k;
 
    strncpy(str1,str,k);
    strcpy(str2,str+k);
 
    cout<<"Pervaya chast: "<<str1<<endl<<"Ostavsheyasa: "<<str2<<endl;
    system("pause");
}
zss
Модератор
Эксперт С++
6242 / 5845 / 1891
Регистрация: 18.12.2011
Сообщений: 14,972
Завершенные тесты: 1
20.11.2013, 21:37     нужно разбить исходную строку на две подстроки , причём первая длинной k #8
Цитата Сообщение от dzrkot Посмотреть сообщение
str1[i+1]='\0';
1.При выходе из цикла i указывает на первый неприсвоеннный символ,
т.к. для него тело цикла не выполнялось.
2. символ '\0' и число 0 - это одно и тоже.
Lexa_Okatow
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 22
20.11.2013, 21:40  [ТС]     нужно разбить исходную строку на две подстроки , причём первая длинной k #9
zss:
у вас не выводит оставшеюся часть.

dzrkot:
у вас выводит Пример: saml
l
Вообщем дело в этой строке str[i]=0. если +1 , то выводит k элементов и на новой строке один следующий элемент))
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,995
20.11.2013, 21:43     нужно разбить исходную строку на две подстроки , причём первая длинной k #10
Цитата Сообщение от zss Посмотреть сообщение
1.При выходе из цикла i указывает на первый неприсвоеннный символ,
т.к. для него тело цикла не выполнялось.
2. символ '\0' и число 0 - это одно и тоже.
при выходе из цикла i пропадает т.к. он локальный, а в main i объявлен, но не определен. Мой компилятор не пропускал просто, вот и всё))
я в курсе, 0 для наглядности написал)

Добавлено через 1 минуту
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
#include <cstdio>
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
     string s;
     int k,i;
     cout<<"Please enter text:";
     getline(cin,s);
     char* str=new char[s.length()];
     strcpy(str,s.c_str());
     cout<<"Vvedite k:";
 
     cin>>k;
     char* str1=new char[k];
     char* str2=new char[s.length()-k];
 
     int L=strlen(str);
     for(i=0;i<k;i++) // Копируем k символов (но не больше длины строки)
     str1[i]=str[i];
     str1[i+1]='\0';  // терминальный ноль
        if(k<L)
        strcpy(str2,str+k); // копируем остаток строки
     cout<<"Pervaya chast: "<<str1<<endl<<"Ostavsheyasa: "<<str2<<endl;
     return 0;
}
Lexa_Okatow
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 22
20.11.2013, 21:43  [ТС]     нужно разбить исходную строку на две подстроки , причём первая длинной k #11
Цитата Сообщение от kufl Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main()
{
    char str[20]="small programm", str1[30]={0}, str2[30]={0};
    int k;
 
    cout<<"Vvedite k:";
    cin>>k;
 
    strncpy(str1,str,k);
    strcpy(str2,str+k);
 
    cout<<"Pervaya chast: "<<str1<<endl<<"Ostavsheyasa: "<<str2<<endl;
    system("pause");
}
Всё good .Спасибо))
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,995
20.11.2013, 21:47     нужно разбить исходную строку на две подстроки , причём первая длинной k #12
Цитата Сообщение от Lexa_Okatow Посмотреть сообщение
Вообщем дело в этой строке str[i]=0. если +1 , то выводит k элементов и на новой строке один следующий элемент))
у меня норм выводит всё) ну подправьте)
zss
Модератор
Эксперт С++
6242 / 5845 / 1891
Регистрация: 18.12.2011
Сообщений: 14,972
Завершенные тесты: 1
20.11.2013, 21:48     нужно разбить исходную строку на две подстроки , причём первая длинной k #13
dzrkot ошибку подправил
C++
1
2
3
     for(i=0;i<k;i++) // Копируем k символов (но не больше длины строки)
                   str1[i]=str[i];
     str1[i]='\0';  // терминальный ноль
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2013, 21:50     нужно разбить исходную строку на две подстроки , причём первая длинной k
Еще ссылки по теме:

Нужно посчитать сумму положительных элементов кратных 2.причём началом этого масивва является не нулевой индекс,а значение ранее вводимой переменной р C++
Разбить строку на все "связные" подстроки. Получившиеся подстроки записать в вектор C++
C++ Разбить исходную строку на две подстроки
C++ Разбить исходную строку на две подстроки, причем первая длиной k символов
C++ Разбить исходную строку на максимальной длины подстроки

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

Или воспользуйтесь поиском по форуму:
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,995
20.11.2013, 21:50     нужно разбить исходную строку на две подстроки , причём первая длинной k #14
Цитата Сообщение от zss Посмотреть сообщение
str1[i]='\0'; // терминальный ноль
кстати да и тут было просто str )
бывает)
Yandex
Объявления
20.11.2013, 21:50     нужно разбить исходную строку на две подстроки , причём первая длинной k
Ответ Создать тему
Опции темы

Текущее время: 05:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru