1

Тема: Речення без слів, що містять певну літеру*

З клавіатури ввести речення. Сформувати нове речення з тих слів введеного речення, в яких немає заданої літери. Врахувати, що задана літера в слові може бути як малою, так і великою.
Не застосовувати бібліотечні функції із заголовних файлів <ctype.h>, <string.h> чи <stdlib.h>. 
Наперед дякую:)

Re: Речення без слів, що містять певну літеру*

kaha94, ви б спочатку теми у відповідних розділах створювали.

3

Re: Речення без слів, що містять певну літеру*

Напрацювання в студію.

Ви ж не халявити сюди зайшли, вірно? :)

http://caricatura.ru/parad/chatypov/pic/6934.jpg

4 Востаннє редагувалося User 298 (26.04.2013 20:35:50)

Re: Речення без слів, що містять певну літеру*

#include <stdio.h>
#include <conio.h>
int main (void)
{
    char st[]="Mova programuvannia C";
    char sym='a';
    int k, n;
    k=n=0;
    while (st[k]!='\0')
       if(st[k]==sym)
          k++;
       else {
          st[n]=st[k];
          n++; k++;
       }
    st[n]='\0';
    printf ("\n Ryadok bez sumvola %c: %s\n", sym, st);
    getch();
    return 0;
}

Bartash: код треба брати у теги [ code ]: читайте Правила перед дописуванням.

ось що я написав. Програма видаляє тільки вказаний символ. Як зробити щоб видаляло і велику і малу літеру?

5

Re: Речення без слів, що містять певну літеру*

ойй, я просто замінив літери...Підкажіть, як правильно виконати задачу.

6 Востаннє редагувалося Yola (26.04.2013 16:44:35)

Re: Речення без слів, що містять певну літеру*

Роби побітовий xor

a ^ A = 00100000 = 32

Для англійських літер різниця завжди в 5-му біті
'a' = 01100001
'A' = 01000001

Сенс у тому, щоб обійти рядок в циклі, найкраще while.
Мати додаткову змінну, яка зберігатиме кількість літер, яких ти видалив.
І в кожному тілі циклу робити таке

якщо літеру потрібно видалити, то
  кількість_видалених++
якщо ні
  s[поточний_індекс - кількість_видалених] = s[поточний_індекс]
кінець якщо

після циклу, записати нуль в кінець.

-----------------
ОПС, ти ж так і чиниш))

7

Re: Речення без слів, що містять певну літеру*

Напишіть, будь ласка, повну програму. Вивчаю С тільки від недавна, не доскнонало все знаю.

8

Re: Речення без слів, що містять певну літеру*

      if(sym == st[k] || (st[k] ^ sym) == 32)

9

Re: Речення без слів, що містять певну літеру*

/* 
 * File:   main.c
 * Author: YaR
 *
 * Created on April 26, 2013, 4:03 PM
 */

#include <stdio.h>
#include <stdlib.h>
#define MAXL 1024

int getln(char *line_pointer, int max_size);

/*
 * З клавіатури ввести речення. Сформувати нове речення з тих слів введеного 
 * речення, в яких немає заданої літери. Врахувати, що задана літера в слові
 * може бути як малою, так і великою. Не застосовувати бібліотечні функції із
 * заголовних файлів <ctype.h>, <string.h> чи <stdlib.h>.
 */
int main(int argc, char** argv) {
    int i, j, k, len;
    char c = 'c';
    char line[MAXL], line2[MAXL];
    if((len = getln(line, MAXL)) > 0){
        printf("lenght: %d\n", len);
        i = j = k = 0;
        while(i <= len){
            if(line[i] == c)
                j = 1;
            if((line[i] == ' ' || line[i] == '\n') && j == 0)
                while(k < i)
                    printf("%c", line[k++]);
            if((line[i] == ' ' || line[i] == '\n') && j == 1){
                while(k < i)
                    k++;
                j = 0;
            }
            i++;
        }
    }
    return (EXIT_SUCCESS);
}

int getln(char *s, int max){
    int i=0;
    while((*s = getchar()) != '\n' && *s != EOF && i < max-1){
        i++;
        s++;
    }
    if(*s == '\n'){
        s++;
        *s = '\0';
        i++;
    }
    else if(*s == EOF)
        return 0;
    return i;
}

10

Re: Речення без слів, що містять певну літеру*

keithfay, програма мала би не реагувати на регістр, а реагує. :)

З.І: Yola цікаве діло каже щодо побітових операцій: файний крок до поліпшення якості кодінгу, імго. :)

11

Re: Речення без слів, що містять певну літеру*

kaha94, вам навели готовий код, робочий і загалом коректний. Розберіться з ним, інакше програміст із вас буде сумнівний...

Чи вам треба ще й ключа від квартири, де гроші лежать?
http://www.spletnik.ru/img/2011/06/dasha/calendars/20110608stu3.jpg

12

Re: Речення без слів, що містять певну літеру*

kaha94, протестуйте код покроково за допомогою дебаґґера у вашому середовищі розробки.