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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
#1

Как правильно пользоваться функцией strtok - C++

07.11.2012, 13:37. Просмотров 1314. Ответов 24
Метки нет (Все метки)

Как правильно пользоваться етой ф-цией? Набросал код, надо пока разбить строку на слова(ф-ция int lek).
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <string.h>
#include <conio.h>
#include <stdio.h>
using namespace std;
void inp(char[]);
void invert(char[], int);
int count(char[], int, int);
int lek(char[], int);
void out(char[], int);
int main()
{
 char x[100];
 inp(x);
 int res = 0; 
 int size = strlen(x);
 invert(x, size);
 lek(x, size);
 count(x, size, res);
 out(x, count(x, size, res));
 return 0;
}
void inp(char x[])
 {
  cout <<"Input string:";
  gets(x);
  cout << endl;
 }
void invert(char x[], int size)
 {
  for(int i=0;i<size/2;i++)
   {
    char  a;    
    a=x[i];
    x[i]=x[size-1-i];
    x[size-1-i]=a;
   }
 }
int count(char x[], int size, int res)
{
    for (int i=0; i<size; i++)
        if (x[i]>='0' && x[i]<='9')
            res++;
    return res;
}
int lek(char x[], int size) 
{
    char* p;
    p=strtok(x, " ");
    for(int i = 0; i<size; i++)
    {
        cout<<"Slovo "<<i+1<<":"<<p[i]<<endl;
    }
    return 0;   
}
void out(char x[], int res)
 {
  cout<<"K-st cufr v recenny:  "<<res<<endl;
  cout<<"Invert str:  ";
  puts(x);
  getch();
}
Добавлено через 50 секунд
И как потом использовать ети "слова" в других ф-ция или циклах(например удалить слова которые начинаються с гласной буквы)?

Добавлено через 53 секунды
P.S. Пока оно выводит просто каждую букву, а не слово.

Добавлено через 16 минут
чуть переработал код(вывод сделал каждой ф-ции)
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <string.h>
#include <conio.h>
#include <stdio.h>
using namespace std;
void inp(char[]);
void invert(char[], int);
int count(char[], int, int);
int lek(char[], int);
int main()
{
 char x[100];
 inp(x);
 int res = 0; 
 int size = strlen(x);
  invert(x, size);
 count(x, size, res);
 lek(x, size);
 getch();
 return 0;
}
void inp(char x[])
 {
  cout <<"Input string:";
  gets(x);
  cout << endl;
 }
void invert(char x[], int size)
 {
  for(int i=0;i<size/2;i++)
   {
    char  a;    
    a=x[i];
    x[i]=x[size-1-i];
    x[size-1-i]=a;
   }
  cout<<"Invert str:  ";
  puts(x);
 }
int count(char x[], int size, int res)
{
    for (int i=0; i<size; i++)
        if (x[i]>='0' && x[i]<='9')
            res++;
    return res;
    cout<<"K-st cufr v recenny:  "<<res<<endl;
}
int lek(char x[], int size) 
{
    char* p;
    p=strtok(x, " ");
    for(int i = 0; i<size; i++)
    {
        cout<<"Slovo "<<i+1<<":"<<p[i]<<endl;
    }
    return 0;   
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2012, 13:37     Как правильно пользоваться функцией strtok
Посмотрите здесь:

Как пользоваться функцией gettime() - C++
Добрый вечер! Кто бы мог подробно объяснить как работает функция gettime(), откуда взять конечное и начальное время, как определить...

Как пользоваться функцией GetFileSize() ? - C++
Привет. В builder'e выполняю следующий код: char str = ''; unsigned long FileSize = 0; GetFileSize('C:\file.exe', &amp;FileSize); ...

Как пользоваться функцией fgetpos, fsetpos? - C++
Не могу понять по какому принципу они работают. Открывал файл на чтение. В файле уже были несколько строчек. Хотел считать их в чаровскую...

Что то не то с функцией strtok!!! - C++
Вот есть код: #include&lt;string.h&gt; #include&lt;iostream.h&gt; int main() { char *string1 = &quot;sdfsdf sdfs gjhg 1 h5jj&quot;; char *string2...

Как в C++ правильно пользоваться полиморфизмом? - C++
Объясните пожалуйста как правильно пользоваться полиморфизмом в плюсах. Задача такая - есть некий абстрактный класс с виртуальными...

Отладчики - какая от них польза и как ими правильно пользоваться? - C++
Какую пользу несут отладчики и как ими правильно пользоваться? Нет, как его запустить я себе представляю (благо иде помогает), но что я...

Как правильно пользоваться typedef для декларации типа указателя на функцию? - C++
Мне нужны будут функции, принимающие параметр-указатель на функции с одним и тем же списком параметров и возвращаемым типом. Как правильно...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
07.11.2012, 15:29     Как правильно пользоваться функцией strtok #2
http://en.cppreference.com/w/cpp/string/byte/strtok

Добавлено через 1 минуту
и даже с переводом: http://ru.cppreference.com/w/cpp/string/byte/strtok
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
08.11.2012, 18:58  [ТС]     Как правильно пользоваться функцией strtok #3
yuron_477, А как потом ети лексемы(слова к примеру) использовать в цикле например(удалить слово при таком то условии...)
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
08.11.2012, 19:01     Как правильно пользоваться функцией strtok #4
Ещё ссылочка по strtok http://www.cplusplus.com/reference/c...string/strtok/
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
08.11.2012, 19:04  [ТС]     Как правильно пользоваться функцией strtok #5
David Sylva, я плохо понимаю английский
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
08.11.2012, 19:06     Как правильно пользоваться функцией strtok #6
автоматический переводчик от гугл, тебе в помощь.
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
08.11.2012, 19:14  [ТС]     Как правильно пользоваться функцией strtok #7
David Sylva, а толку от него, там ведь только "теория", покрайней мере как толком работать с strtok я не знаю(
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
08.11.2012, 19:16     Как правильно пользоваться функцией strtok #8
Там ещё внизу хорошей пример.
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
08.11.2012, 19:21  [ТС]     Как правильно пользоваться функцией strtok #9
David Sylva, ну оно удалило знаки препинания, а как слово тогда удалить? Именно слово, сначала ведь надо поделить строку, а потом брать поочереди каждую лексему и проверять ее. Покрайней мере я думаю что в моем случаэ(удалить слова начинающиеся с гласной буквы) делать надо так. Как лексемы в цикл передать.7
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
08.11.2012, 19:25     Как правильно пользоваться функцией strtok #10
Я тебе просто показал, где подробно написано про функцию strtok. Опиши условие задачи.
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
08.11.2012, 19:32  [ТС]     Как правильно пользоваться функцией strtok #11
David Sylva, Ввести строку, удалить из нее слова которые начинаються на гласную букву. В моем коде ф-ция len делит почемуто строку по-символьно(напил кажись все верно, но не делит по словах). Остальние две ето ето другое задание.

Добавлено через 34 секунды
что делать дальше, точнее как ето делать я не знаю
vasiliy21
26 / 26 / 2
Регистрация: 24.10.2012
Сообщений: 135
08.11.2012, 19:43     Как правильно пользоваться функцией strtok #12
Я это сделал по другому! Здесь только фрагмент программы, но думаю вы догадаетесь что к чему, и как по своему сделать

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <string.h>
#include <conio.h>
#include <stdio.h>
using namespace std;
void deletes(char [], int );
void inp(char[]);
void invert(char[], int);
int count(char[], int, int);
int lek(char[], int);
int main()
{
 char x[100];
 inp(x);
 int res = 0; 
 int size = strlen(x);
  
 
 lek(x, size);
 getch();
 return 0;
}
void inp(char x[])
 {
  cout <<"Input string:";
  gets(x);
  cout << endl;
 }
 
int lek(char s[], int size) 
{
    int i;
     
    for(int i = 0; i < size; i++){
      if(s[i] == 'A'){
            for(int j = i; j < size; j++){
              if(s[j] == ' '){
                break;
                  }
                    s[j] = ' ';
                    }
            }
            
    }
 
for (i = 0; i < size; i++)
 {  if ((s[i]==' ') && (s[i+1]==' '))
    deletes(s,i+1);
}
 cout <<s;
 
}
 
 
 
void deletes(char s[], int pos)
{ int i;
if ((s[pos]== ' ') && (s[pos+1]== ' '))
{ deletes(s,pos+1); }
for (i = pos; i < strlen(s); i++)
 {
  s[i]=s[i+1];
}
s[i]=0;
 
}
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
08.11.2012, 20:06  [ТС]     Как правильно пользоваться функцией strtok #13
vasiliy21, ошика, пишет что ф-ция lek должна возвращать значение. Она действительно должна возращать чтото или можна сделать ее void?
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <string.h>
#include <conio.h>
#include <stdio.h>
using namespace std;
void inp(char[]);
void invert(char[], int);
void count(char[], int, int);
int lek(char[], int);
void deletes(char[], int);
int main()
{
 char x[100];
 inp(x);
 int res = 0; 
 int size = strlen(x);
 count(x, size, res);
 lek(x, size);
 invert(x, size);
 getch();
 return 0;
}
void inp(char x[])
 {
  cout <<"Input string:";
  gets(x);
  cout << endl;
 }
void invert(char x[], int size)
 {
  for(int i=0;i<size/2;i++)
   {
    char  a;    
    a=x[i];
    x[i]=x[size-1-i];
    x[size-1-i]=a;
   }
  cout<<"Invert str:  ";
  puts(x);
 }
void count(char x[], int size, int res)
{
    for (int i=0; i<size; i++)
        if (x[i]>='0' && x[i]<='9')
            res++;
    cout<<"K-st cufr v recenny:  "<<res<<endl;
}
int lek(char s[], int size) 
{
    int i;
    for(i = 0; i < size; i++){
      if(s[i] == 'A'){
            for(int j = i; j < size; j++){
              if(s[j] == ' '){
                break;
                  }
                    s[j] = ' ';
                    }
            }
            
    }
 
for (i = 0; i < size; i++)
 {  if ((s[i]==' ') && (s[i+1]==' '))
    deletes(s,i+1);
}
 cout <<s;
 
}
 
 
 
void deletes(char s[], int pos)
{ int i;
if ((s[pos]== ' ') && (s[pos+1]== ' '))
{ deletes(s,pos+1); }
for (i = pos; i < strlen(s); i++)
 {
  s[i]=s[i+1];
}
s[i]=0;
 
}
Добавлено через 10 минут
Уже сам немного разобрался, сделал воид, сечас еще условие правильное задам, чтоб канало так как надо)

Добавлено через 6 минут
блин, оно удаляет все символы после гласной буквы до конца слова((
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <string.h>
#include <conio.h>
#include <stdio.h>
using namespace std;
void inp(char[]);
void invert(char[], int);
void count(char[], int, int);
void lek(char[], int);
void deletes(char[], int);
int main()
{
 char x[100];
 inp(x);
 int res = 0; 
 int size = strlen(x);
 //count(x, size, res);
 cout <<"String witout a-words:";
 lek(x, size);
 //invert(x, size);
 getch();
 return 0;
}
void inp(char x[])
 {
  cout <<"Input string:";
  gets(x);
  cout << endl;
 }
void invert(char x[], int size)
 {
  for(int i=0;i<size/2;i++)
   {
    char  a;    
    a=x[i];
    x[i]=x[size-1-i];
    x[size-1-i]=a;
   }
  cout<<"Invert str:  ";
  puts(x);
 }
void count(char x[], int size, int res)
{
    for (int i=0; i<size; i++)
        if (x[i]>='0' && x[i]<='9')
            res++;
    cout<<"K-st cufr v recenny:  "<<res<<endl;
}
void lek(char s[], int size) 
{
    int i;
    for(i = 0; i < size; i++){
      if(s[i] == 'A' || s[i] == 'E' || s[i] == 'Y' || s[i] == 'U' || s[i] == 'I' || s[i] == 'O' || 
          s[i] == 'a' || s[i] == 'e' || s[i] == 'y' || s[i] == 'u' || s[i] == 'i' || s[i] == 'o'){
            for(int j = i; j < size; j++){
              if(s[j] == ' '){
                break;
                  }
                    s[j] = ' ';
                    }
            }       
    }
    for (i = 0; i < size; i++)
        {
            if ((s[i]==' ') && (s[i+1]==' '))
                deletes(s,i+1);
        }
    cout <<s;
}
void deletes(char s[], int pos)
{ int i;
if ((s[pos]== ' ') && (s[pos+1]== ' '))
{ deletes(s,pos+1); }
for (i = pos; i < strlen(s); i++)
 {
  s[i]=s[i+1];
}
s[i]=0;
}
vasiliy21
26 / 26 / 2
Регистрация: 24.10.2012
Сообщений: 135
08.11.2012, 20:10     Как правильно пользоваться функцией strtok #14
Цитата Сообщение от ozzy_b Посмотреть сообщение
блин, оно удаляет все символы после гласной буквы до конца слова((
а оно что должно удалить?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2012, 20:17     Как правильно пользоваться функцией strtok
Еще ссылки по теме:

Как правильно работать с функцией window()? - C++
Задача такая. Вывести в верхней части экрана небоольшой заголовок с менюшками. Затем прочитать файл и вывести его с прокруткой в оставшейся...

Как правильно работать с функцией _getch() ? - C++
Ребята, задача такова: Надо нарисовать фигурку в консоли. И дигать ,по консоли, фигурку стрелочками из клавиатуры. Операторы котрые...

Как правильно реализовать инициализацию массива функцией? - C++
Здравствуйте! Мне нужно что бы вся инициализация массива происходила в отдельной функции и что бы этот массив можно было в дальнейшем...

Написать аналог процедуры Insert. Процедурой Delete и функцией Copy не пользоваться - C++
Добрый день. Помогите пожалуйста решить 2 задачи 1. Написать аналог процедуры Insert. Процедурой Delete и функцией Copy не пользоваться.

Не правильно работает когда делаю функцией - C++
#include &lt;vcl.h&gt; #pragma hdrstop //-------------------------------------------------------------------------— #pragma...


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

Или воспользуйтесь поиском по форуму:
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
08.11.2012, 20:17  [ТС]     Как правильно пользоваться функцией strtok #15
надо удалить все слова что начинаються на гласную букву, вот пример как оно работает. http://cs419721.userapi.com/v4197213...sf2pmz57w4.jpg

Добавлено через 1 минуту
ето фото того как рабоет мой\твой код, оно удаляет в слове то что идет после гласной буквы(включая саму букву)
Yandex
Объявления
08.11.2012, 20:17     Как правильно пользоваться функцией strtok
Ответ Создать тему
Опции темы

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