Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Dilan
8 / 8 / 1
Регистрация: 26.09.2009
Сообщений: 65

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

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

Студворк — интернет-сервис помощи студентам
доброе время суток
Столкнулся с такой проблемой, надо сделать прогу которая:
Вводим текст, и из этого текста удаляем слова которые состают из не чётных количество символов
ну например
Он это 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.09.2009, 15:00
Ответы с готовыми решениями:

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

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

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

8
81 / 81 / 6
Регистрация: 14.09.2009
Сообщений: 252
26.09.2009, 15:08
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
 Аватар для Dilan
8 / 8 / 1
Регистрация: 26.09.2009
Сообщений: 65
26.09.2009, 15:33  [ТС]
огромное спасибо

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

значит как она их расставляет не вмешиваться? то-есть самому не регулировать?
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
26.09.2009, 16:00
не надо ничего регулировать, после нажатия на ентер среда сама ставит отступ, только вот например при удалении какой-либо части строки нарушается отступ и его необходимо вручную корректировать так чтобы он был таким как и весь код
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,699
26.09.2009, 16:17
В 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Эксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
26.09.2009, 17:19
для разнообразия
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
 Аватар для Dilan
8 / 8 / 1
Регистрация: 26.09.2009
Сообщений: 65
26.09.2009, 17:29  [ТС]
даа тут вобще космос, если кому не лень step by step объясните
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.09.2009, 17:29
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru