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

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

Войти
Регистрация
Восстановить пароль
 
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
#1

создать функцию на основе кода (разбиение строки на отрезки) - C++

09.05.2011, 08:51. Просмотров 656. Ответов 4
Метки нет (Все метки)

Здравствуйте уважаемые программисты. Мне нужна Ваша помощь. Есть небольшой код программы, суть которой в следующем. На входе есть строка. Программа "разбивает" строку на отрезки по разделителю (в моем случае это запятая). Каждый отрезок помещается в отдельный индекс массива. В результате я получаю готовый массив и могу свободно использовать его.
Листинг программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <windows.h>
using namespace std;
 
int main()
{
  char mass[10][10];//массив в который будут помещаться отрезки
  char stroka[]="sasha,petya,maksim,nikolay,sveta";//исходная строка
 
  char *p;
  p = strtok(stroka, ",");
  strcpy(mass[0],p);
 
  int i=1;
  do {
    p = strtok('\0', ",");
    if(p) strcpy(mass[i],p);
    i++;
  } while(p);
  return 0;
}
Так вот. Задача стоит в следующем. Необходимо создать функцию которая заменила бы этот код. В качестве параметра функции исходная строка. Сама же функция должна вернуть мне массив с отрезками. Вроде бы все просто, но как сделать это ума не приложу.

Не по теме:

я только учусь не судите строго



Добавлено через 2 часа 39 минут
Без функции код программы придется повторять много раз, это ведь неправильно. Хочу по человечески сделать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2011, 08:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос создать функцию на основе кода (разбиение строки на отрезки) (C++):

Как создать программу (экзешник) с GUI на основе кода консольного приложения? - C++
Народ как создать программу если есть код С++ ? Хочу создать программу с окнами ! тип (exe) приложение! Есть исходный код в С++ Программа...

Разбиение кода на лексемы - C++
Добрый день. Интересует такой вопрос. Какие средства могут помочь при написании программы анализа исходного кода java?Необходимо исходный...

разбиение кода на заголовочники - C++
пытаюсь разбить этот код по заголовочникам, но после разбиения выдает ошибку и даже не одну, а 16, хотя если все в куче, то никаких ошибок...

Разбиение ряда чисел на отрезки - Matlab
Здравствуйте, нужна ваша помощь!!! Имеется ряд чисел в виде двух строчек. В первой строке числа всегда постоянные, во второй идут по...

Можно ли на основе кода пакетного файла создать программу с графическим интерфейсом? - CMD/BAT
Раньше не обращал внимание на включенную в ОС прогу PowerShell. Сейчас занимаюсь программированием на BAT - заметил её... Кто знает...

Преобразование строки в её аналог на основе ASCII-кодов и поиск max и min кода - Assembler
Привет, вот вроде как рабочий код , В начале проверка паролем, потом ввод строки и поиск максимального кода, Собсно вопрос...

4
dampir_sanek
150 / 148 / 21
Регистрация: 09.02.2010
Сообщений: 407
09.05.2011, 11:33 #2
LedZeppelin, держи:
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>
#include <windows.h>
using namespace std;
 
const int size = 5;
const int length = 10;
 
char** str_delim(char* stroka, char** mas)
{
    char *p;
    int i = 1;
    p = strtok(stroka, ",");
    strcpy(mas[0],p);   
    do {
        p = strtok('\0', ",");
        if (p) 
            strcpy(mas[i],p);
        i++;
    } while(p);
    return mas;
}
 
int main()
{
    char** mass;
    mass = new char*[size];
    for (int i = 0; i < size; ++i) 
        mass[i] = new char[length];
    
    char stroka[] = "sasha,petya,maksim,nikolay,sveta";
    mass = str_delim(stroka, mass);
    cout << "Vash massiv:\n ";
    for (int i = 0; i < size; ++i )
        cout << mass[i] << endl;
    getchar();
    return 0;
}
Добавлено через 34 минуты
еще нужно память освободить. Так что main маленько дополнится:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
        char** mass;
        mass = new char*[size];
        for (int i = 0; i < size; ++i) 
                mass[i] = new char[length];
        
        char stroka[] = "sasha,petya,maksim,nikolay,sveta";
        mass = str_delim(stroka, mass);
        cout << "Vash massiv:\n ";
        for (int i = 0; i < size; ++i )
                cout << mass[i] << endl;
        // освобождаем память
        for (int i = 0; i < size; ++i )
        delete[] mass[i];
    delete[] mass;
 
        getchar();
        return 0;
}
1
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
09.05.2011, 17:27  [ТС] #3
dampir_sanek, Спасибо что не пожалели времени и показали как это сделать. Вот только в качестве аргумента выступает массив и строка. А так что бы была только строка, никак нельзя сделать ?

Добавлено через 16 минут
Хотелось бы что бы массив создавался в самой функции (если это вообще возможно), то есть так что бы в самой main не было ни чего лишнего.
0
dampir_sanek
150 / 148 / 21
Регистрация: 09.02.2010
Сообщений: 407
09.05.2011, 18:33 #4
LedZeppelin, ок, тогда функция ничего возвращать не будет, внутри себя создаст массив, и обработает строку, затем распечатает результат.

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
#include <iostream>
#include <windows.h>
using namespace std;
 
const int size = 5;
const int length = 10;
 
void str_delim(char* stroka)
{
    char** mas = new char*[size];
    for (int i = 0; i < size; ++i) 
        mas[i] = new char[length];
 
    char *p;
    int i = 1;
    p = strtok(stroka, ",");
    strcpy(mas[0],p);       
    do {
            p = strtok('\0', ",");
            if (p) 
                    strcpy(mas[i],p);
            i++;
    } while(p);
     cout << "Vash massiv:\n ";
    for (int i = 0; i < size; ++i )
            cout << mas[i] << endl;
    // освобождаем память
    for (int i = 0; i < size; ++i )
            delete[] mas[i];
    delete[] mas;
    getchar();
}
 
 
int main()
{          
        char stroka[] = "sasha,petya,maksim,nikolay,sveta";
        str_delim(stroka);        
        return 0;
}
1
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
09.05.2011, 19:07  [ТС] #5
dampir_sanek, Ну вот !!, теперь есть две функции для возврата и для вывода. Я получил больше чем хотел. Спасибо Вам.
0
09.05.2011, 19:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2011, 19:07
Привет! Вот еще темы с ответами:

Как создать визуальный интерфейс (окно с элементами) на основе только кода c# - без использования XAML и WPF? - C#
Интересуют примеры создания визуальных интерфейсов (окон с элементами) на основе только кода c# - без использования XAML и WPF. И...

Как создать XML на основе строки? - C#
Она парсит файл и создоёт кэш элементы в sb. Как на основе sb создать xmldocument? static void Main(string args) { ...

Создать функцию для избавления от повторения кода - Delphi
Помогите как создать функцию чтобы несколько раз не писать код: procedure TForm1.Timer3Timer(Sender: TObject); var i1,j1:integer; ...

Как грамотно создать Recordset в текущей базе на основе SQL - запроса или просто на основе таблицы? - Visual Basic
Как грамотно создать Recordset в текущей базе на основе SQL - запроса или просто на основе таблицы?


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

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

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