8 / 8 / 1
Регистрация: 26.09.2009
Сообщений: 65
1

помогите найти ошибку

26.09.2009, 15:00. Показов 809. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
доброе время суток
Столкнулся с такой проблемой, надо сделать прогу которая:
Вводим текст, и из этого текста удаляем слова которые состают из не чётных количество символов
ну например
Он это 2 символа
Она это 3 итд..

вроде сделал, но у меня он не видит первое слово, и не важно оно из 2 или из 5 симболов

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
[SIZE=2]#include<stdio.h>
#include<iostream.h>
#include<string.h>
 
int main(int argc, char* argv[])
{
cout<<"pasalins nelyginius zodzius...:";
char sak[128];
gets(sak);
 
char *sep="\|,<.>/?;;'\|}]{[`!@#$%^&*()-_=+ ";
char *zodis=strtok(sak,sep);
int n;// = strlen(zodis);
while (zodis!= NULL)
{
zodis = strtok (NULL, sep);
if(zodis == NULL)break;
n = strlen(zodis);
if (n%2==0)
cout <<zodis<<" ";
}       
 
int i;
cin>>i;
 
        return 0;
}[/SIZE]
учитель дал пример. я из этого примера сделал то что мне надо (как видете не до конца сделал...) вот тока одно тут не понимаю что обозначает "strtok" на что он влияет?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2009, 15:00
Ответы с готовыми решениями:

Помогите найти ошибку: По двум сторонам и углу найти все остальное
Доброго времени суток. В универе дали задание написать программу &quot;По двум сторонам и углу между...

Помогите найти ошибку
Помогите, с этим кодом неправильно..(( proizv красным почерком #include &lt;iostream&gt; using...

Помогите найти ошибку
Короче написал прогу, в которой вводится строка, и в ней надо заменить первое слово. Всё работает...

Помогите найти ошибку
#include &quot;stdafx.h&quot; #include &quot;stdlib.h&quot; #include &quot;iostream&quot; #include &quot;conio.h&quot; ...

8
81 / 81 / 6
Регистрация: 14.09.2009
Сообщений: 252
26.09.2009, 15:08 2
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
#include<stdio.h>
#include<iostream.h>
#include<string.h>
 
int main(int argc, char* argv[])
{
  cout<<"pasalins nelyginius zodzius...:";
  char sak[128];
  gets(sak);
 
  char *sep="\|,<.>/?;;'\|}]{[`!@#$%^&*()-_=+ ";
  char *zodis=strtok(sak,sep);
  int n;// = strlen(zodis);
 
  n = strlen(zodis);
  if (n%2==0)
    cout <<zodis<<" "; //выводим первое слово
 
  while (zodis!= NULL)
  {
    zodis = strtok (NULL, sep);
    if(zodis == NULL)break;
    n = strlen(zodis);
    if (n%2==0)
      cout <<zodis<<" ";
  }
 
  int i;
  cin>>i;
 
return 0;
}
Добавлено через 3 минуты
Вот про strtok
char *strtok(string1,string2);

находит символ в string1
char *string1; строка, содержащая символы
char *string2; множество символов-ограничителей

Описание.

Функция strtok читает строку string1 как множество нуль или более знаков, служащих в качестве ограничителей для символов в string1. Символы в string1 могут отделяться одним или более ограничителем от string2. Символы в string1 разрываются столько раз, сколько вызывается strtok. При первом вызове strtok для заданной строки string1, strtok находит первый символ в string1, пропуская
предыдущие ограничители. Указатель возвращается на первый знак.

Для того, чтобы прочитать следующий символ из string1, функция strtok вызывается вместе с NULL значением для аргумента string1.
Аргумент NULL строки string1 вызывает strtok для поиска следующего знака в предыдущей строке символов. Множество ограничителей может быть различным от вызова к вызову, так как string2 может
принимать любые значения.

Замечание. String1 можно модифицировать вызовами strtok, так как после вызова strtok в string1 вставляется нулевое значение.

Возвращаемое значение.

При вызове strtok первый раз, она возвращает указатель на первый символ в string1. При последующих вызовах в этой же самой строке символов, strtok возвращает указатель на следующий символ в строке. Указатель NULL возвращается, когда нет больше символов. Все символы оканчиваются нулем.
1
8 / 8 / 1
Регистрация: 26.09.2009
Сообщений: 65
26.09.2009, 15:33  [ТС] 3
огромное спасибо

Добавлено через 5 минут
кстати народ, я смотрю что мой код выглядит очень топорно, а вот у GAV_13 он красиво расставил пробелы. как они ставятся и где?
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
26.09.2009, 15:42 4
Dilan, обычно среда сама их расставляет. В какой среде работаешь?
0
8 / 8 / 1
Регистрация: 26.09.2009
Сообщений: 65
26.09.2009, 15:47  [ТС] 5
DEV-C++

значит как она их расставляет не вмешиваться? то-есть самому не регулировать?
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
26.09.2009, 16:00 6
не надо ничего регулировать, после нажатия на ентер среда сама ставит отступ, только вот например при удалении какой-либо части строки нарушается отступ и его необходимо вручную корректировать так чтобы он был таким как и весь код
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
26.09.2009, 16:17 7
В DEV С++ само не расставляется. Или у меня среда не настроена?
...А вообще обязательных правил нет. Главное, чтобы читать было удобно.

Не скупись на пробелы и комментарии. Логические блоки отделяй друг от друга пустыми строками. Все инструкции блока пиши друг под другом. И пусть они будут сдвинуты на один пробел относительно последней инструкции не блока. Ну то есть

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main () {
 //инструкции блока, логически связанные меж собой. И пробел слева присутствует
 //...
 
 //другие инструкции бока, также логически связанные меж собой
 //
 
 //То же самое. Блок, состоящий из одной инструкции всего 
 return 0;
}
 
//Некоторые объявления
int a;
float b;
Вот ты видишь несколько пустых строк, пробелы слева. int main в данном это последняя предыдущая инструкция не блока. Блок инструкций заключён в фигурные скобки.
Термин "логически" ты всякий раз определяешь сам. Как считаешь нужным, так и обособляй инструкции друг от друга пустыми строками.

Всё это мы наблюдаем в коде GAV_13
Там только фигурные скобки расставлены по-другому, но это не суть важно.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12453 / 7478 / 1752
Регистрация: 25.07.2009
Сообщений: 13,748
26.09.2009, 17:19 8
для разнообразия
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
#include <stdio.h>
#include <ctype.h>
    
/* Печать слов из предложения, состоящих из чётного и нечётного количества букв */
    
/* подсчёт букв от указателя до первого пробела или знака пунктуации*/
int lettersCount(char *w){
    int count = 0;
    while ( *w != '\0' && !isspace(*w) && !ispunct(*w) ){
        count++;
        w++;
    }
    return count;
}
 
/* указатель на следующее слово в строке, или 0, если слова кончились */
char *nextWord(char *str){
    char *p;
    for ( p = str; *p != '\0' && !isspace(*p) && !ispunct(*p); p++ )
        ;
    if ( *p == '\0' )
        return NULL;
    while ( isspace(*p) || ispunct(*p) )
        p++;
    return ( *p == '\0' ) ? NULL : p;
}
 
/* Печатает одно слово из строки */
void printOneWord(char *s){
    while ( *s && !isspace(*s) && !ispunct(*s) ){
        putchar(*s);
        s++;
    }
}
 
 
int main(){
    char inpbuf[BUFSIZ];
    char *wrd;
    
    while ( fgets(inpbuf, sizeof(inpbuf), stdin) ) {
        wrd = inpbuf;
        printf("Odd: ");
        do {
            if ( lettersCount(wrd) % 2 ){
                printOneWord(wrd);
                putchar(' ');
            }
            wrd = nextWord(wrd);
        } while ( wrd );
        wrd = inpbuf;
        printf("\nEven: ");
        do {
            if ( !(lettersCount(wrd) % 2) ){
                printOneWord(wrd);
                putchar(' ');
            }
            wrd = nextWord(wrd);
        } while ( wrd );
        putchar('\n');
    }
    
    return 0;
}
0
8 / 8 / 1
Регистрация: 26.09.2009
Сообщений: 65
26.09.2009, 17:29  [ТС] 9
даа тут вобще космос, если кому не лень step by step объясните
0
26.09.2009, 17:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2009, 17:29
Помогаю со студенческими работами здесь

Помогите найти ошибку
//Даны три положительных числа а, b, c. Проверить, могут ли они быть длинами сторон треугольника....

помогите найти ошибку.
Когда вводишь 0 или -20 например, ERROR не выдает,а что-то непонятное.почему? #include...

Помогите найти ошибку.
Дана целочисленная прямоугольная матрица. Определить: 1. Максимум среди сумм элементов диагоналей,...

Помогите найти ошибку
Сегодня начал изучать c++ и не могу найти ошибку вот задача ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru