В строке найти 5-символьные слова и цифровое значение - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, требуется помощь в решение задачи. Написать программу, обрабатывающую введенный пользователем текст, состоящий из слов, записанных через пробелы. Длина текста не больше 255 символов. В тексте могут быть использованы любые символы. Словом считать последовательность символов, не содержащую пробел. Необходимо введенный текст вывести на экран до и после его преобразования, выполнив все задания, указанные в индивидуальном задании. ИЗ:Сформировать строку, в которую включить только 5-символьные слова, в которых литеры расположены "по возрастанию". Найти первое цифровое слово и возвести его значение в квадрат. Пока что реализовал нахождение цифрового слова, но никак не могу возвести его в квадрат. +затык по поиску 5 символьных слов, мне бы хоть алгоритм понять... Помогите пожайлуста
//---------------------------------------------------------------------------
#pragma hdrstop
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
//---------------------------------------------------------------------------
short int in_array(char *mass,char serch)
{         short int i;
        for(i=0;mass[i]!='\0';i++)
        {
                if(mass[i]==serch)/*Функция поиска символов*/
                {
                return 1;
                }
        }
    return 0;
}
#pragma argsused
int main(int argc, char* argv[])
{
int i,j,m,k=0,f=0,p=0, glasn=0, sogl=0,schet=0,n;
char s[254];
char cha[] = {"qwertyuiopasdfghjklzxcvbnm"};
char nums[] = {"0123456789"};
char s1[254][254];
 
printf ("vvedite tekst <255\n");
gets (s);
 
j=0;
n=0;
for(i = 0; i <strlen(s); i++)
{
        if (s[i] != ' ')
        {
                s1[n][j] = s[i];
                j++;
        }
        else
        {
                n++;
                j=0;
        }
}
for(i = 0; i <= n; i++)/*Поиск цифрового слова*/
{
    m=0;
    for(j = 0; j < strlen(s1[i]); j++)
    {
 
            if (in_array(cha,s1[i][j]))
            {
                    m++;
            }
    }
                    if (m==0)
                    {
                            for(k=0;k<strlen(s1[i]);k++)
                            {
                                while (p==0)
                                {
                                p=1;
                                printf("%c", s1[i][k]*s1[i][k]);/*А тут мне нужна ваша помощь по возведению в квадрат*/
                                }
                            }
                    }
}
getch ();
        return 0;
}
//---------------------------------------------------------------------------
P.S. Работаю в Borland C++ Builder 6

Решение задачи: «В строке найти 5-символьные слова и цифровое значение»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
 
bool issorted(const char* str)
{
    for (int i = 0; str[i + 1] != '\0'; i++)
        if (str[i] > str[i + 1]) return false;
 
    return true;
}
 
int main(int argc, char argv[])
{
    static char str[256] = "apple fruit 1234567 orange 987654321 abcde lemon fghij tea jklmn\0";
 
    int n = 0;
    static char* words[256] = { 0 };
    for (int i = 0; str[i] != '\0'; i++)
        if (isspace(str[i]) || str[i+1] == '\0')
        {
            int pos = i - 1; char* wd = new char[256];
            while (!isspace(str[pos]) && pos >= 0) pos--;
 
            int count = 0; int l = pos + 1;
            while (!isspace(str[l]) && str[l] != '\0')
                wd[count++] = str[l++];
 
            wd[count] = '\0';
            if (count == 5 && issorted(wd))
            {
                words[n] = new char[256];
                strcpy(words[n++], wd);
            }
        }
 
    char output[256] = { 0 };
    for (int r = 0; words[r] != NULL; r++)
    {
        strcat(output, words[r]);
        if (words[r+1] != NULL) strcat(output, " ");
    }
 
    printf("string = %s\noutput = %s\n\n", str, output);
 
    int r = 0;
    for (int i = 0; str[i] != '\0'; i++)
    {
        if (!isdigit(str[i])) continue;
        int n = 0; char* digits = new char[256];
        while (isdigit(str[i]) && str[i] != '\0')
            digits[n++] = str[i++];
 
        digits[n] = '\0';
        printf("%d %s\n", r, digits);
        
        r++;
    }
 
    printf("\n");
 
    _getch();
 
    return 0;
}

Объяснение кода листинга программы

Код выполняет следующие действия:

  1. Ищет в строке слова, состоящие из 5 символов, и сохраняет их в массив words. В каждом слове сначала проверяется, является ли оно отсортированным. Если слово отсортировано, оно добавляется в массив words.
  2. Создает новую строку output, в которую добавляются все найденные слова из массива words, разделенные пробелами.
  3. Выводит исходную строку и полученную строку output.
  4. Ищет в исходной строке цифры, сохраняет их в отдельные строки и выводит их. Список действий:
  5. Включаются необходимые заголовочные файлы.
  6. Определяется функция, которая проверяет, является ли строка отсортированной.
  7. Определяется основная функция программы.
  8. В основной функции инициализируются необходимые переменные.
  9. В цикле обрабатывается каждый символ исходной строки.
  10. Если текущий символ является пробелом или концом строки, то предыдущее слово добавляется в массив words.
  11. Если текущий символ является цифрой, то он добавляется в отдельную строку, которая затем выводится на экран.
  12. Завершается основная функция программы.
  13. Завершается программа.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы