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

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

Восстановить пароль Регистрация
 
LedZeppelin
 Аватар для LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
09.05.2011, 08:51     создать функцию на основе кода (разбиение строки на отрезки) #1
Здравствуйте уважаемые программисты. Мне нужна Ваша помощь. Есть небольшой код программы, суть которой в следующем. На входе есть строка. Программа "разбивает" строку на отрезки по разделителю (в моем случае это запятая). Каждый отрезок помещается в отдельный индекс массива. В результате я получаю готовый массив и могу свободно использовать его.
Листинг программы:
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 минут
Без функции код программы придется повторять много раз, это ведь неправильно. Хочу по человечески сделать
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dampir_sanek
149 / 147 / 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;
}
LedZeppelin
 Аватар для LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
09.05.2011, 17:27  [ТС]     создать функцию на основе кода (разбиение строки на отрезки) #3
dampir_sanek, Спасибо что не пожалели времени и показали как это сделать. Вот только в качестве аргумента выступает массив и строка. А так что бы была только строка, никак нельзя сделать ?

Добавлено через 16 минут
Хотелось бы что бы массив создавался в самой функции (если это вообще возможно), то есть так что бы в самой main не было ни чего лишнего.
dampir_sanek
149 / 147 / 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;
}
LedZeppelin
 Аватар для LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
09.05.2011, 19:07  [ТС]     создать функцию на основе кода (разбиение строки на отрезки) #5
dampir_sanek, Ну вот !!, теперь есть две функции для возврата и для вывода. Я получил больше чем хотел. Спасибо Вам.
Yandex
Объявления
09.05.2011, 19:07     создать функцию на основе кода (разбиение строки на отрезки)
Ответ Создать тему
Опции темы

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