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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
dander
0 / 0 / 0
Регистрация: 03.12.2010
Сообщений: 44
#1

В символьной строке удалить все слова, состоящие из нечетного количества букв. - C++

25.10.2011, 12:45. Просмотров 2823. Ответов 26
Метки нет (Все метки)

Привет.
Нужна ваша помощь в написании проги на С. Не на С++ =)
Ниже приведено условие:
В символьной строке удалить все слова, состоящие из нечетного количества букв.
Всем "+" за помощь=) Спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2011, 12:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В символьной строке удалить все слова, состоящие из нечетного количества букв. (C++):

В символьной строке удалить все слова, состоящие из N - букв - C++ - C++
Помогите пожалуйста не могу написать программу через string.

В символьной строке удалить все слова, состоящие более чем из N - букв - C++
Напихал все что можно, не работает. Программирования не знаю похоже):wall: #include <iostream> // огранизация ввод/вывод #include...

В символьной строке удалить все слова, состоящие более чем из N букв - C++
Не использовать дефолтные функции работы со строками (например strstr, strlen) -В символьной строке удалить все слова, состоящие более...

Найти в списке из 7 слов все слова, состоящие из заданного количества букв - C++
Как решить такое в Borland C++? что использовать строки или символы? какую команду использовать для определения количества букв в одном...

В символьной строке удалить все слова, начинающиеся с гласной буквы - C++
В символьной строке удалить все слова, начинающиеся с гласной буквы. Не допускается использование библиотек работы с символьными строками....

Вывести слова, состоящие из заданного количества букв - C++
нужно составить программу, которая считывает текст из файла и выводит на экран только слова, состоящие из заданного количества букв. у меня...

26
dander
0 / 0 / 0
Регистрация: 03.12.2010
Сообщений: 44
26.10.2011, 17:48  [ТС] #16
вот скрин
в чем ошибка? =)
0
Миниатюры
В символьной строке удалить все слова, состоящие из нечетного количества букв.  
dander
0 / 0 / 0
Регистрация: 03.12.2010
Сообщений: 44
26.10.2011, 18:32  [ТС] #17
easybudda,
да при выполнении программы в VS выдает ошибку
так что нужно исправить, что код работал VS&
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
27.10.2011, 02:10 #18
-=ЮрА=-, сделай вот так
C
1
    while(sscanf(&str[pos],"%s",buf) == 1)
0
-=ЮрА=-
Заблокирован
Автор FAQ
27.10.2011, 09:27 #19
dander, ты создал проект Console Aplication???По скрину смотрю что нет, хотя в 10-ке я не спец у меня 2008 и 98-ая. Так вот возьми скопируй мой код просто в срр файл, помести єтот файл в отдельную папку, открой и скомпилируй проект, по поводу твоего письма в личку - Ты ИМЕННО ОШИБАЕШСЯ, т.к. дословно - прилепил код в проект не Console Aplication и теперь ломаешь голову, что же не так...

По поводу этого
Цитата Сообщение от dander Посмотреть сообщение
так что нужно исправить, что код работал VS&
Уже написал тебе
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
dander, в принципе если Вам сложно будет понять код, возьмите код easybudda, он в плане объёма меньше вот тут только замените это
Сообщение от easybudda
char buf[strlen(str) + 2],
на это
Код C
1
char buf[STR_LEN]
иначе в Visual Studio компилятор выдаст ошибку

Не по теме:

accept, тебе опять неймётся?Мне чё скрин сюда работы выложить, удосужся хотябы скомпилировать мой код и запустить + потестить а потом говори что мне и как писать, ну реально зачем вставляешь свои 5-ть копеек туда куда не нужно...

0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
27.10.2011, 09:36 #20
Цитата Сообщение от -=ЮрА=-
ну реально зачем вставляешь свои 5-ть копеек туда куда не нужно...
учись писать правильно
цикл у тебя срабатывает, когда операция не удаётся
даже если ты вставил там проверку, это всё равно никакой подход

Цитата Сообщение от -=ЮрА=-
удосужся хотябы скомпилировать мой код и запустить
а зачем, я и так вижу, как он работает
я просто могу это представить

ты когда-то писал такое:
C
1
2
    char *p = malloc(1);
    strcpy(p, "abcd");
и аргументировал это тем, что код работает
0
-=ЮрА=-
27.10.2011, 09:40
  #21

Не по теме:

Цитата Сообщение от accept Посмотреть сообщение
я просто могу это представить
- нет не можешь, скомпилируй в Release оттестируй а потом пиши...
PS:Есть поговорка - кто старое помянет тому глаз вон...
Устал от тебя и реагировать не хочу, холиворбь сам с собой

0
-=ЮрА=-
Заблокирован
Автор FAQ
27.10.2011, 10:04 #22
dander, ниже простая Си реализация твоего алгоритма + готовый проект в архиве, разархивируй папку проекта и открой студией dsw файл, мастер конвертирования сам всё преобразует. Если захочешь без мастера открой срр-ник и выбери меню BuildProject так студия сама всё достроит что надо. Новый проект НЕ ДЕЛАЙ, т.к. есть большая доля вероятности что при создании указываешь или CLI или API или ещё что-то но только не Console Aplication
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
#include <stdio.h> //printf scanf
#include <string.h>//strtok
 
int main()
{
    char chr, str[1024];
    char buf[1026];//Буффер строки str
    char delim[] = " ,.!?";//Возможные разделители между словами
    printf("Enter sentence\n");
    scanf("%[^\n]%c",str,&chr);
    //Выделяем из строки токены (слова)
    //части ограниченные символами из delim
    char * tok = strtok(str,delim);//Выделили 1-е слово
    if(tok)
    {
        buf[0] = '\0';
        while(tok)
        {
            if(strlen(tok) % 2 == 0)
            {
                strcat(buf,tok);//Добавляем в buf слово
                strcat(buf," ");//Добавляем в buf пробел
            }
            //Продолжаем выделять из строки слова
            tok = strtok(NULL,delim);
        }
        printf("String after removing not odd words\n");
        printf("%s\n",strcpy(str,buf));
    }
    else
        printf("String not contain words or empty\n");
    printf("Press any key to continue\n");
    scanf("%c",&chr);
    return 0;
}
0
Миниатюры
В символьной строке удалить все слова, состоящие из нечетного количества букв.  
Вложения
Тип файла: rar RemNoOdd.proj.rar (1.9 Кб, 13 просмотров)
-=ЮрА=-
Заблокирован
Автор FAQ
27.10.2011, 10:14 #23
В заключение, выкладываю скрин и готовой проект на основе кода из поста 3
дабы глубокоуважаемый мною господин accept, ещё раз убедился в своих заблуждениях
PS:dander, как и в предыдущем посте, привожу уже готовый архив с проектом и скрин, а также лог Release надеюсь, сможешь почувствовать разницу между обрезанием знаков strtok и их наличие после работы по моему алгоритму, на сим для себя считаю топик полностью исчерпанным!

лог Release
--------------------Configuration: RemNoOdd2 - Win32 Release--------------------
Compiling...
RemNoOdd2.cpp
Linking...

RemNoOdd2.exe - 0 error(s), 0 warning(s)
0
Миниатюры
В символьной строке удалить все слова, состоящие из нечетного количества букв.  
Вложения
Тип файла: rar RemNoOdd2.rar (2.2 Кб, 9 просмотров)
-=ЮрА=-
Заблокирован
Автор FAQ
08.11.2011, 13:21 #24

Не по теме:

dander, ответил в личку - хотите без буффера - используйте 3-й пост
PS:В 22-м посте и так всё прокомменчено - подробней я не умею, как по мне и так всё понятно...



Добавлено через 15 минут
dander, вобщем если у вас слова идут ровно через пробел и нету знаков препинаний, то посмотрите сюда Найти самое короткое из слов в предложении
лишь чуточку доработаете под ваш вариант и всё
0
-=ЮрА=-
Заблокирован
Автор FAQ
08.11.2011, 14:30 #25
dander, вот Ваш алгоритм в простом исполнении - проще уже никак
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
#include <stdio.h>
#include <conio.h>
 
int main()
{
    long i,j,pos;//pos - позиция в строке начала слова
    long wLen = 0;//Будет содержать в себе длинну текущего слова
    char str[1024] = {0};//исходная строка
    printf("\tEnter input string\n");
    //В Си строку с пробелами по другому думаю и не ввести!
    scanf("%[^\n]",str);//В str то что ввели в chr - '\n' от ввода
    char word[32] = {0};
    printf("\tSee steps of removing\n");
    //Да так бесконечный for - выходим из него здесь
    //if(str[i] == '\0')
    //      break;
    //так надо!
    for(i = 0,pos = 0; /*str[i] != '\0'*/true;i++)
    {
        //Парсим пробел, окончание строки и знаки препинания
        if(str[i] == ' ' || str[i] == '\0' ||
           str[i] == '.' || str[i] == ','  ||
           str[i] == '!' || str[i] == '?'  || 
           str[i] == ';' || str[i] == '-' )
        {
            //Нечётное слово
            if(wLen % 2 != 0)
            {
                  //Удаляем word из str
                  for(j = 0; str[pos + wLen + j] != '\0'; j++)
                      str[pos + j] = str[pos + wLen + j];
                  if(j == 0)//word было последним в str
                      str[pos - 1] = '\0';
                  else
                      str[pos + j] = '\0';
                  printf("%s\n",str);
            }
            wLen = 0;
            pos  = i + 1;
        }
        else
            wLen++;
        //Нужно чтобы алгоритм отрабатывал для последнего слова
        if(str[i] == '\0')
            break;
    }
    printf("String after removing NoOddWords:\n %s\n",str);
    printf("Press any key to continue\n");
    getch();
    return 0;
}
0
Миниатюры
В символьной строке удалить все слова, состоящие из нечетного количества букв.  
easybudda
08.11.2011, 15:35
  #26

Не по теме:

Берег Темзы, 7 утра, спортивного телосложения англичанин отжимается от скамейки. Подходит полицмен:
- Сэр, простите, что вмешиваюсь, но по-моему ваша дама уже ушла...

1
-=ЮрА=-
Заблокирован
Автор FAQ
08.11.2011, 15:43 #27

Не по теме:

Гыы да тут конкурс острот
- Вчера набрался смелости и поцеловал Юльку.
- А она мне: "И что бы это значило?"
- А я возьми и ляпни с дуру: "Запрос на авторизацию"
- Сказала, чтоб в субботу приходил к ней логиниться..



Добавлено через 2 минуты

Не по теме:

PS:Оживлением топика послужило
Сегодня, 10:23
dander
юра здравствуйте. это снова я..=) [ в строке удалить слова с нечетным количеством букв]при сдаче лабы препод указал на то что мы не должны использовать дополнительных строк.(я показывалл последний код программы, который в архиве) не могли бы Вы мне снова помочь. пробовал сам сделать, не понял, к сожалению.
Сегодня, 10:56
dander
Сообщение от -=ЮрА=-
Привет - дай ссылку с каким именно кодом работаешь???Что от меня требуется когда буду анализировать код - комментарии???
В символьной строке удалить все слова, состоящие из нечетного количества букв.
архив RemNoOdd.proj.rar да комментарии..

0
08.11.2011, 15:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2011, 15:43
Привет! Вот еще темы с ответами:

Удалить из строки слова, состоящие только из прописных букв - C++
Работа со строками (С) Дана строка символов, состоящая из прописных и строчных латинских букв и пробелов. Группы символов, разделенные...

Удалить из текста все слова, которые начинаются с букв, заданных в строке запроса - C++
Пытался сам написать,но выдает ошибку.Как правильно должен выглядеть код?Заранее спасибо. #include&lt;iostream&gt; #include&lt;stdio.h&gt; ...

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

Вывести на экран все слова сообщения, состоящие из n букв - C++
вывести на экран все слова сообщения состоящие из n букв


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

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

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