В строке найти 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;
}
Объяснение кода листинга программы
Код выполняет следующие действия:
- Ищет в строке слова, состоящие из 5 символов, и сохраняет их в массив words. В каждом слове сначала проверяется, является ли оно отсортированным. Если слово отсортировано, оно добавляется в массив words.
- Создает новую строку output, в которую добавляются все найденные слова из массива words, разделенные пробелами.
- Выводит исходную строку и полученную строку output.
- Ищет в исходной строке цифры, сохраняет их в отдельные строки и выводит их. Список действий:
- Включаются необходимые заголовочные файлы.
- Определяется функция, которая проверяет, является ли строка отсортированной.
- Определяется основная функция программы.
- В основной функции инициализируются необходимые переменные.
- В цикле обрабатывается каждый символ исходной строки.
- Если текущий символ является пробелом или концом строки, то предыдущее слово добавляется в массив words.
- Если текущий символ является цифрой, то он добавляется в отдельную строку, которая затем выводится на экран.
- Завершается основная функция программы.
- Завершается программа.