С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

20.11.2013, 21:13. Просмотров 945. Ответов 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--;
Помогите сделать так , что бы работало, и если можно то объясните.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2013, 21:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос нужно разбить исходную строку на две подстроки , причём первая длинной k (C++):

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

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

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

Разбить строку на все "связные" подстроки. Получившиеся подстроки записать в вектор - C++
Нужно разбить минимальную строку на &quot;связные&quot; подстроки Например: строка Mas: &quot;qwe&quot; нужны подстроки: &quot;q&quot;,&quot;w&quot;,&quot;e&quot;,&quot;qw&quot;,&quot;we&quot;,&quot;qwe&quot;....

Разбить строку string на подстроки - C++
Имеется строка string &quot;один два три четыре пять шесть семь восемь девять&quot;. Как ее разбить на подстроки из трех слов, чтоб получились...

Разделить строку на две подстроки. - C++
Доброго времени суток.. В задании необходимо разбить исходную строку на две подстроки, при этом первая длиной k символов (если на k-ю...

13
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
20.11.2013, 21:19 #2
а код писали вы?

Цикл выполняется пока значение str[k] не является пробелом и(логическая и) к больше 0, в конце цикла счётчик к уменьшается на 1.
C++
1
2
while(str[k]!= ' ' && k>0)
k--;
Добавлено через 1 минуту
а есчо у вас к какбы символ...
int k; объявите...
0
zss
Модератор
Эксперт С++
6590 / 6152 / 2026
Регистрация: 18.12.2011
Сообщений: 16,041
Завершенные тесты: 1
20.11.2013, 21:21 #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;
}
0
Lexa_Okatow
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 22
20.11.2013, 21:24  [ТС] #4
Цитата Сообщение от dzrkot Посмотреть сообщение
а код писали вы?

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

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

Не по теме:

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

0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
20.11.2013, 21:33 #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;
}
0
kufl
1 / 1 / 0
Регистрация: 21.10.2013
Сообщений: 15
20.11.2013, 21:35 #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");
}
1
zss
Модератор
Эксперт С++
6590 / 6152 / 2026
Регистрация: 18.12.2011
Сообщений: 16,041
Завершенные тесты: 1
20.11.2013, 21:37 #8
Цитата Сообщение от dzrkot Посмотреть сообщение
str1[i+1]='\0';
1.При выходе из цикла i указывает на первый неприсвоеннный символ,
т.к. для него тело цикла не выполнялось.
2. символ '\0' и число 0 - это одно и тоже.
0
Lexa_Okatow
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 22
20.11.2013, 21:40  [ТС] #9
zss:
у вас не выводит оставшеюся часть.

dzrkot:
у вас выводит Пример: saml
l
Вообщем дело в этой строке str[i]=0. если +1 , то выводит k элементов и на новой строке один следующий элемент))
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
20.11.2013, 21:43 #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;
}
0
Lexa_Okatow
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 22
20.11.2013, 21:43  [ТС] #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 .Спасибо))
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
20.11.2013, 21:47 #12
Цитата Сообщение от Lexa_Okatow Посмотреть сообщение
Вообщем дело в этой строке str[i]=0. если +1 , то выводит k элементов и на новой строке один следующий элемент))
у меня норм выводит всё) ну подправьте)
0
zss
Модератор
Эксперт С++
6590 / 6152 / 2026
Регистрация: 18.12.2011
Сообщений: 16,041
Завершенные тесты: 1
20.11.2013, 21:48 #13
dzrkot ошибку подправил
C++
1
2
3
     for(i=0;i<k;i++) // Копируем k символов (но не больше длины строки)
                   str1[i]=str[i];
     str1[i]='\0';  // терминальный ноль
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
20.11.2013, 21:50 #14
Цитата Сообщение от zss Посмотреть сообщение
str1[i]='\0'; // терминальный ноль
кстати да и тут было просто str )
бывает)
0
20.11.2013, 21:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2013, 21:50
Привет! Вот еще темы с ответами:

Мне надо сделать поиск последнего вхождения подстроки s1 в строку s(с функцией LastPos, не strstr). В этом коде просто вхождение подстроки в строку. - C++
#include &lt;stdio.h&gt; int count_of_substrings(string s, string s1){ int start = 0; int count = 0; int pos = 0; ...

Написать функцию, которая формирует строку, состоящую только из цифр, входящих в исходную строку - C++
Нужна помощь задачу нужно написать в консольном режиме Написать и протестировать функцию, которая по заданной строке str формирует...

Нужно найти максимальные и минимальные числа в массиве, причём кол-во массивов задаётся пользователем - C++
#include &lt;iostream.h&gt; int main () { int a, n; cin&gt;&gt;n; for (int i=0; i&lt;n;i++) cin &gt;&gt; a; for...

Определить длину самой длинной подстроки из подряд стоящих букв «е» - C++
Прошу проверить программу на правильность. Условие: Дана символьная строка. Определить длину самой длинной подстроки из подряд стоящих...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.