1

Тема: Символьні дані

Завдання:
Видалити ті слова рядка, які мають цифри


#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

#define S 255
int main() {
    char str[s];
    printf("input text: "); gets_s(str);
    unsigned int lenght = strlen(str);
    unsigned int i;
    for (i = 0; i < lenght; i++)
        if(isdigit(str[i]))// якщо є символ то...
         
        /* що тут написати щоб видаляти ті рядки? */
    
    printf("%s", str);
    printf("\n");
    return 0;
}    

2

Re: Символьні дані

Ви хоч пробували той код скомпілювати? С чутливі до регістру символа.

3

Re: Символьні дані

Чи не простіше не видаляти слова в рядку, а зразу виводити лише ті з них, що не містять цифр, а також пробіли між словами?

4

Re: Символьні дані

P.Y. написав:

Чи не простіше не видаляти слова в рядку, а зразу виводити лише ті з них, що не містять цифр, а також пробіли між словами?

Простіше, але я уявлення не маю як це робиться :( то потрібний допоміжний масив чи що?

5

Re: Символьні дані

потрібен

6

Re: Символьні дані

Bogaty написав:
P.Y. написав:

Чи не простіше не видаляти слова в рядку, а зразу виводити лише ті з них, що не містять цифр, а також пробіли між словами?

Простіше, але я уявлення не маю як це робиться :( то потрібний допоміжний масив чи що?

Необов'язково. Можна просто запам'ятовувати в змінну, де був початок слова, а потім, дійшовши до його кінця, вивести по одному всі символи від початку слова до поточного місця.

Подякували: leofun011

7

Re: Символьні дані

cheappi386 написав:

Ви хоч пробували той код скомпілювати? С чутливі до регістру символа.

Пробував я видаляв цифри з слова, але не знаю як видаляти саме слово

#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

#define S 255
int main() {
    char str[s];
    printf("input text: "); gets_s(str);
    unsigned int lenght = strlen(str);
    unsigned int i;
    for (i = 0; i < lenght; i++)
        if(isdigit(str[i]))
         str[i]=' '          // так все працювало правильно, тут просто замінював символи на пробіли
    printf("%s", str);
    printf("\n");
    return 0;
} 

8

Re: Символьні дані

У вас уже була задача на слова, але з іншим критерієм. Тут - схоже, але замість довжини слова треба перевіряти, чи є в ньому цифри.

Подякували: P.Y., Bogaty, leofun013

9

Re: Символьні дані

koala написав:

У вас уже була задача на слова, але з іншим критерієм. Тут - схоже, але замість довжини слова треба перевіряти, чи є в ньому цифри.

Так програма взагалі нічого не виводить

#include <iostream>
#include <clocale>
#include <conio.h>
#include <string.h>
using namespace std;

void words(char* st)
{
    char sl[100];
    int k = 0, i, n;

    n = strlen(st);

    for (i = 0; i < n; i++)

        if (st[i] != ' ')
        {

            sl[k] = st[i];

            sl[k + 1] = '\0';
            k++;
        }
        else
        {
            if (isdigit(sl[i])) 
            puts(sl);
            sl[0] = '\0';
            k = 0;
        }
}

int main()
{
    char st[100];
    setlocale(LC_ALL, ".1251");
    puts("Введiть рядок: ");
    gets_s(st);
    strcat_s(st, " ");
    puts("Слова без цифр");
    words(st);

    return 0;
}

https://replace.org.ua/uploads/images/9626/01123c037a6c7e4330a8497acdfcff06.png

10

Re: Символьні дані

Ви можете словами записати алгоритм, який намагаєтеся запрограмувати?

11

Re: Символьні дані

koala написав:

Ви можете словами записати алгоритм, який намагаєтеся запрограмувати?

Там де isdigit мені потрібно пускати кожну букву слова і в разі, якщо є цифра видаляти слово, або як сказав P.Y., але я взагалі не розумію як це реалізувати, вчора витратив на завдання половину дня. *WALL*  *FACEPALM*

12

Re: Символьні дані

Вибачте, я вас просив словами описати алгоритм, а не ваш код. Готовий код буде реалізовувати алгоритм, але "там, де isdigit" - це про код, а не про алгоритм. Ви взагалі знаєте, що таке алгоритм? Можете уявити собі, що перед вами лежать кубики з літерами? Можете описати, як виконати ваше завдання, на рівні операцій з кубиками?
Наприклад, "видалити" - це опис чогось складного. Наприклад, "видалити третій кубик" означає "перекласти третій кубик убік, а потім пересунути на його місце четвертий, на місце четвертого - п'ятий, і так дал, до кінця стрічки, на місце (i)-го кубика пересунути (i+1)-й. Зрозуміло?

Подякували: Bogaty1

13

Re: Символьні дані

koala написав:

Вибачте, я вас просив словами описати алгоритм, а не ваш код. Готовий код буде реалізовувати алгоритм, але "там, де isdigit" - це про код, а не про алгоритм. Ви взагалі знаєте, що таке алгоритм? Можете уявити собі, що перед вами лежать кубики з літерами? Можете описати, як виконати ваше завдання, на рівні операцій з кубиками?
Наприклад, "видалити" - це опис чогось складного. Наприклад, "видалити третій кубик" означає "перекласти третій кубик убік, а потім пересунути на його місце четвертий, на місце четвертого - п'ятий, і так дал, до кінця стрічки, на місце (i)-го кубика пересунути (i+1)-й. Зрозуміло?

Я сам прошу вибачення довго сидіів над програмою на думку вже нічого не приходило вирішив преписати заново, також у мене була проблема з функціями,і це також збивало з пантелику... Але все вийшло. Ось новий код

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "ukr");
    cout << "\n Введiть рядок  ";
    char s[80];
    gets_s(s);
    int n = strlen(s); 
    char* word;
    cout << "\n\n\n Рядок без цифр:  \n";
    char* s1 = new char[n];
    strcpy(s1, "");
    word = strtok(s, " ");
    while (word != NULL)
    {
        if (strpbrk(word, "0123456789") == NULL)
            strcat(s1, word);
        strcat(s1, " ");
        word = strtok(NULL, " ");
    }
    strcat(s1, "\0");
    printf("\n\t%s", s1);
    delete[] s1;
    return 0;
}

14

Re: Символьні дані

Це ж не ваш код, правда?