Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Sabonar
3 / 3 / 0
Регистрация: 11.10.2012
Сообщений: 27
#1

Из массива строк выделить подстроки состоящие из русских букв, затем найти среди них самую котороткую - C++

10.03.2013, 19:43. Просмотров 580. Ответов 4
Метки нет (Все метки)

Продолжение задания:
В строке, содержащей самую коротку подстроку(из условия) - русские буквы в конце.
Помогите пожалуйста дописать эту прогу.
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <iostream>
using namespace std;
 
 
void substr(char str[][81], int n, char str1[][81], int*n1, int num[])
{
int i,a;
char *s,*s1,*s2; 
 
*n1=0;  
for(i=0;i<n;i++)
   {
   s=str[i]; 
   while(*s)
    {
        a=0;
        if ('А'<*s && *s<'п' || 'р'<*s && *s<'ё')
          a++;
     }
        if (a==strlen(str[i]))
        {
            num[*n1]=i; 
            strncpy(str1[*n1],0,strlen(str[i]));
            (*n1)++;
        }
     }
    }
}
 
void korot(char str[][81], int n, char str1[][81])
{
int i,imin,min;
char *s;
min=strlen(str1[0]);
imin=0;
for(i=1;i<n;i++);
{
    if (strlen(str[i])<min)
    {
        min=strlen(str[i]);
        imin=i;
    }
}
 
 
 
}
void rus(char str[][81], int n, char str1[][81], int*n1, int num[])
{
int i,a;
char *s;
a=strlen(str[num[imin]]);
do
a--;
while ('А'<str[num[imin]][a] && str[num[imin]][a]<'п' || 'р'<str[num[imin]][a] && str[num[imin]][a]<'ё');
if (a!=strlen(str[num[imin]])) 
}
 
int main()
{
int n=0, n1, num[100], f, i, k;
char str [10][81], str1[10][81];
printf("input strings: \n");
while(n<10 && *gets(str[n]))n++;
substr(str, n, str1, &n1, num); 
printf("strings: \n");
for(i=0; i<n1; i++)
   puts(str1[i]);
 
return 0;
}
Вот мой нерабочий код, наброски с алгоритма. Каждое подзадание разбито на функции. Прошу помощи!

Добавлено через 2 часа 2 минуты
Решил попробовать с нуля .
Вот код, который выделяет подстроки , состоящие только из русских букв. Подскажите как лучше сделать диапозон русских букв, потому что мой - не рабочий.
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
void substr(char str[][81], int n, char str1[][81], int*n1, int num[])
{
int i;
char *s,*s1,*s2;
*n1=0;
for(i=0;i<n;i++)
   {
   s1=NULL;
   s=str[i];
   while(*s)
      if ('А'<*s && *s<'Я' || 'а'<*s && *s<'я')
         {
         s2=s-1;
         while('А'<*s && *s<'Я' || 'а'<*s && *s<'я'&&*s)
            s++;
         if (s2>=s1&&s1)
               {
               num[*n1]=i;
               strncpy(str1[*n1],s1,s2-s1+1);
 
               str1[*n1][s2-s1+1]='\0';
               (*n1)++;
               }
            s1=s;
            }
      else s++;
         }
 
   }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2013, 19:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из массива строк выделить подстроки состоящие из русских букв, затем найти среди них самую котороткую (C++):

В каждой строке найти минимальный элемент, затем среди них найти максимальное и вывести на экран индекс этого элемента - C++
Здравствуйте! Помогите, пожалуйста, с задачей: В двумерном массиве все числа различны. В каждой строке найти минимальный элемент, затем...

Вывести максимальные значения среди двумерного массива, и найти среди них минимум - C++
#include &lt;iostream&gt; using namespace std; int main(){ int const n=3; int i,j,max1,max2,max3; int m={{1,2,3}, ...

Выделить каждое второе слово и найти самую часто встречающуюся в них букву - F#
В данном текстовом файле выделить каждое второе слово и найти самую часто встречающуюся в них букву. Помогите с реализацией на F#,...

Ввести произвольную последовательность из 20 символов и выяснить, - сколько среди них точек, сколько среди них пробелов, сколько среди них букв Д - Delphi
Ввести произвольную последовательность из 20 символов и выяснить, - сколько среди них точек, сколько среди них пробелов, сколько среди...

Корректное считывание строк из файла вне зависимости от кодировки и замена в них русских букв на английские - VBScript/JScript
Доброго времени суток ! Делаю программу, которая анализирует содержимое текстовых файлов. Это файлы настройки для некоторой программы и...

Определить номера строк массива, содержащих только положительные элементы и найти среди них наибольший - Delphi
Добрый день,написала программу но эта кнопка работает неправильно, неверно находит строки с положительными элементами, максимум тоже через...

4
gazlan
3132 / 1908 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
10.03.2013, 21:14 #2
Для ANSI (1251), это дипазон от 0xC0 до 0xFF. Учтите, что сравнение должно выполняться для unsigned char.
Самый быстрый способ - задать булевскую таблицу {0,1} для всего диапазона символов (256). Для русских букв выставляете 1, для всех остальных - 0. Проверка через if несколько нагляднее.
1
Sabonar
3 / 3 / 0
Регистрация: 11.10.2012
Сообщений: 27
11.03.2013, 21:17  [ТС] #3
Цитата Сообщение от gazlan Посмотреть сообщение
Для ANSI (1251), это дипазон от 0xC0 до 0xFF. Учтите, что сравнение должно выполняться для unsigned char.
Самый быстрый способ - задать булевскую таблицу {0,1} для всего диапазона символов (256). Для русских букв выставляете 1, для всех остальных - 0. Проверка через if несколько нагляднее.
Спасибо.
У меня ещё есть небольшие не понятки. Во-первых, как именно реализовывать поиск русских символов через аски в СИ, я так понимаю нужно делать подобную конструкцию(как у меня) только вместо символов - аски коды.
Я немного некорректно объяснил задачу. Подстроки должны состоять полностью из русских символов.Тоесть в строке
"Авбфы_ыфвывф_123ыв_asd" где "_" - это пробел, по идее должны выделятся подстроки "Авбфы" и "ыфвывф"
0
gazlan
3132 / 1908 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
11.03.2013, 23:57 #4
Цитата Сообщение от Sabonar Посмотреть сообщение
в строке "Авбфы_ыфвывф_123ыв_asd" где "_" - это пробел, по идее должны выделятся подстроки "Авбфы" и "ыфвывф"
Ну, да. А что вас смущает? Пробел (0x20) не входит в диапазон русских букв и не будет рассматриваться как часть слова.

Пример "на пальцах". Пусть весь алфавит трехсимвольный AZ_, где A считаем русской буквой, Z - латинской, а _ - пробелом. Их HEX коды будут 0, 1 и 2, соответственно, а ваша булевская таблица будет иметь размер 3.

Для выделения только русских букв выставляем флаги
C++
1
2
3
T[0] = 1; // true
T[1] = 0; // false
T[2] = 0; // false
Пусть текст хранится в массиве Str.

Тогда проверка для i-ой буквы строки
C++
1
if (T[(BYTE)Str[i]])
вернет 1 (true) если это русская буква и 0 (false) для любой другой.

Для небольших алфавитов это самый простой и быстрый способ (В Asm есть даже специальная команда для этого).

Весь ваш код, по сути, сводится к двум циклам while ()

C++
1
2
3
4
while (!русская_буква)
{
   переходим к следующей
}
C++
1
2
3
4
while (русская_буква)
{
   добавляем ее к слову
}

Можете еще скачать с моей странички WordLister и посмотреть, как в нем устроены таблицы трансляции (.XLT) - он работает именно так и предназначен именно для парсинга произвольных текстов по заданному пользователем алфавиту.
1
Sabonar
3 / 3 / 0
Регистрация: 11.10.2012
Сообщений: 27
13.03.2013, 18:08  [ТС] #5
Спасибо! Очень полезная информация!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2013, 18:08
Привет! Вот еще темы с ответами:

В StringGrid найти ячейки, состоящие только из латинских букв, и сформировать из них список ListBox - Delphi
В данной сетке строк StringGrid найти ячейки состоящие только из латинских букв, и сформировать из них список ListBox. В Delphi

Найти минимальное число в каждой строке, а затем максимальное среди них - C (СИ)
Мне нужно было ввести двумерный массив с клавиатуры, затем посчитать минимальноче число в каждой строке и вывести его, а после среди них...

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

разработать консольное приложение для ввода с клавиатуры массива строк и поиска среди них строк, содержащих заданный строковый фрагмент. - C#
Помогите пожалуйстааа!!! Не пойму как это сделать на C#. Контрольное задание Необходимо разработать консольное приложение для...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
13.03.2013, 18:08
Ответ Создать тему
Опции темы

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