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

Функция и указатель - C++

Восстановить пароль Регистрация
 
Sniper777
-12 / 0 / 1
Регистрация: 20.12.2011
Сообщений: 43
25.12.2011, 09:53     Функция и указатель #1
Помогите доделать прогу. Эта прога. разделяет русские и латинские буквы на две строки. Нужно сделать так что бы она ещё выводила 3-й большие латинские буквы и 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
#include<iostream.h>
#include<string.h>
#include<stdio.h>
#include<conio.h>
void razlozh(){
int m,n,y,x;
m=0;
n=0;
cout<<"Vvedite stroku simvolov"<<"\n";
 
char a[30],b[60],c[60];
cin>>a;
for(int i=0;a[i]!='\0';i++){
if (a[i]>='A'&&(a[i]<='z')){
b[m]=a[i];
m++;
}
else {
c[n]=a[i];
n++;}
}
cout<<"latinskie simvoli v stroke"<<"\n";
for(y=0;y<m;y++){
cout<<b[y];
}
cout<<"\n"<<"russkie simvoli v stroke"<<"\n";
for(x=0;x<n;x++){
cout<<c[x];
}
}
void main()
{
for(int s=0;s<=1;s++){
razlozh();
cout<<"\n\n";
}
getch();
}
Миниатюры
Функция и указатель  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sniper777
-12 / 0 / 1
Регистрация: 20.12.2011
Сообщений: 43
25.12.2011, 12:24  [ТС]     Функция и указатель #2
Чё даже идей нет
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 12:40     Функция и указатель #3
C++
1
2
char rusA[60], rusa[60], engA[60], enga[60]; // Массивы
int rA = 0, ra = 0, eA = 0, ea = 0;
Читаешь символы из строки и делаешь для них проверку:
C++
1
2
3
4
5
6
7
8
if (a[i] >= 'A' && a[i] <= 'Z')
  engA[eA++] = a[i];
else if (a[i] >= 'a' <= 'z')
  enga[ea++] = a[i];
else if (a[i] >= 'а' && a[i] <= 'я') // тута русские символы
  rusa[ra++] = a[i];
else
  rusA[rA++] = a[i];
После выполнения цыкла нужно в концы массивов поставить символ завершения строки.
engA[eA] = enga[ea] = rusA[rA] = rusa[ea] = 0;

Добавлено через 3 минуты
И не парься с их выводом, достаточно написать cout << "Русские заглавные: " << rusA << "\n";
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
25.12.2011, 12:42     Функция и указатель #4
Цитата Сообщение от darkknight2008 Посмотреть сообщение
if (a[i] >= 'A' && a[i] <= 'Z')
engA[eA++] = a[i];
else if (a[i] >= 'a' <= 'z')
enga[ea++] = a[i];
else if (a[i] >= 'а' && a[i] <= 'я') /
а..я не совсем верно, т.к. вроде сначала идут в кодировке буквы от а до п, а потом от р до я
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
25.12.2011, 12:50     Функция и указатель #5
Цитата Сообщение от Dani Посмотреть сообщение
а..я не совсем верно, т.к. вроде сначала идут в кодировке буквы от а до п, а потом от р до я
Смотря в какой кодировке. Вообще надёжнее всего тогда сделать строчки типа
C++
1
char rusUpper = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
и проверять по ним.
Sniper777
-12 / 0 / 1
Регистрация: 20.12.2011
Сообщений: 43
25.12.2011, 17:07  [ТС]     Функция и указатель #6
Подскажите куда вставлять то уменя чёта не получается

Добавлено через 1 час 49 минут
Помогите разобраться
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 18:12     Функция и указатель #7
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
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
void main( void )
{
  wcout.imbue(locale("rus_rus.866"));
  wcin.imbue(locale("rus_rus.866"));
  
  const int MAX_STR = 40;
  // Сама строка
  wchar_t str[MAX_STR + 1];
  // массивы букв rusL - русские маленькие engU - английские большие
  wchar_t rusL[MAX_STR + 1], rusU[MAX_STR + 1], engL[MAX_STR + 1], engU[MAX_STR + 1];
  // счетчики позиции
  int rL, rU, eL, eU;
  rL = rU = eL = eU = 0;
  wcout << L"Insert string: ";
  wcin.getline(str, MAX_STR);
  
  wchar_t *p = str;
 
  while(*p != 0)
  {
    if (*p >= 'а' && *p < 'я')
      rusL[rL++] = *p;
    else if (*p >= 'А' && *p <= 'Я')
      rusU[rU++] = *p;
    else if (*p >= 'a' && *p <= 'z')
      engL[eL++] = *p;
    else if (*p >= 'A' && *p <= 'Z')
      engU[eU++] = *p;
  }
  rusL[rL] = rusU[rU] = engL[eL] = engU[eU] = 0;
  wcout << L"Russina lower case characters: " << rusL << L"\n";
  wcout << L"Russina upper case characters: " << rusU << L"\n";
  wcout << L"English lower case characters: " << engL << L"\n";
  wcout << L"English upper case characters: " << engU << L"\n";
 
}
Вроде должно быть как-то так, я не проверял.
Sniper777
-12 / 0 / 1
Регистрация: 20.12.2011
Сообщений: 43
25.12.2011, 18:55  [ТС]     Функция и указатель #8
Цитата Сообщение от darkknight2008 Посмотреть сообщение
Вроде должно быть как-то так, я не проверял
Компилятор запускается только не чё не вводится?
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 19:09     Функция и указатель #9
Исправил, добавил комментов.
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
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
void main( void )
{
  wcout.imbue(locale("rus_rus.866"));
  wcin.imbue(locale("rus_rus.866"));
  
  const int MAX_STR = 40;
  // Сама строка
  wchar_t str[MAX_STR + 1];
  // массивы букв rusL - русские маленькие engU - английские большие
  wchar_t rusL[MAX_STR + 1], rusU[MAX_STR + 1], engL[MAX_STR + 1], engU[MAX_STR + 1];
  // счетчики позиции
  int rL, rU, eL, eU;
  rL = rU = eL = eU = 0;
  wcout << L"Insert string: ";
  // Считываем строку
  wcin.getline(str, MAX_STR);
  
  wchar_t *p = str;
 
  // Пока не достигнем конца строки
  while(*p != 0)
  {
    if (*p >= L'а' && *p < L'я') // Если русская маленькая
      rusL[rL++] = *p;
    else if (*p >= L'А' && *p <= L'Я') // Если русская большая
      rusU[rU++] = *p;
    else if (*p >= L'a' && *p <= L'z') // Если англ маленькая
      engL[eL++] = *p;
    else if (*p >= L'A' && *p <= L'Z') // Если англ большая
      engU[eU++] = *p;
    p++;
  }
  // Ставим символ завершения строки.
  rusL[rL] = rusU[rU] = engL[eL] = engU[eU] = 0;
 
  wcout << L"Russina lower case characters: " << rusL << L"\n";
  wcout << L"Russina upper case characters: " << rusU << L"\n";
  wcout << L"English lower case characters: " << engL << L"\n";
  wcout << L"English upper case characters: " << engU << L"\n";
  system("pause");
}
Sniper777
-12 / 0 / 1
Регистрация: 20.12.2011
Сообщений: 43
25.12.2011, 19:24  [ТС]     Функция и указатель #10
Щас он мне выдаёт это.
Нажимаешь на любую кнопку и он закрывается
Миниатюры
Функция и указатель  
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 19:29     Функция и указатель #11
Каким компилятором пользуешься? У меня программа полноценно работает. Прикрепляю файлик с кодом.
Вложения
Тип файла: rar main.rar (710 байт, 5 просмотров)
Sniper777
-12 / 0 / 1
Регистрация: 20.12.2011
Сообщений: 43
25.12.2011, 19:53  [ТС]     Функция и указатель #12
У меня C++Builder, 6 а у тебя

Добавлено через 8 минут
Всё, спасиба большое через Visual работает
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 19:54     Функция и указатель #13
Visual Studio 2010
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2011, 19:55     Функция и указатель
Еще ссылки по теме:

C++ Функция, возвращающая указатель
C++ Функция, возвращающая указатель на структуру
C++ Функция, возвращающая умный указатель

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

Или воспользуйтесь поиском по форуму:
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
25.12.2011, 19:55     Функция и указатель #14
Цитата Сообщение от Somebody Посмотреть сообщение
Смотря в какой кодировке
угу...
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
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <string.h>
 
char f1( int n ){
    char *str = "abcdefghigklmnopqrstuvwxyz";
    return ( strchr( str, n ) != NULL );
}
 
char f2( int n ){
    const char *str = "ABCDEFGHIGKLMNOPQRSTUVWXYZ";
    return ( strchr( str, n ) != NULL );
}
 
char f3( int n ){
    const char *str = "абвгдеёжзийклмнопрстуфхцшщчьыъэюя";
    return ( strchr( str, n ) != NULL );
}
 
char f4( int n ){
    const char *str = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
    return ( strchr( str, n ) != NULL );
}
 
char chois ( int i, int n ){
    switch ( i ){
        case 0: return f1( n );
        case 1: return f2( n );
        case 2: return f3( n );
        case 3: return f4( n );
        default: return 0;
    }
}
 
int main()
{
    char *str = "ЭТО engLISH строка";
    char *beg = str, *end = &str[ strlen( str ) ];
    int i = 0, num = 4;
    //beg = str, *end = &str[ strlen( str ) ];
 
    while ( i < num ){
        beg = str;
 
        while ( beg != end )
            if( chois(i, *beg++) )
                putchar( *( beg - 1 ) );
        putchar('\n');
        ++i;
    }
 
    return 0;
}
Yandex
Объявления
25.12.2011, 19:55     Функция и указатель
Ответ Создать тему
Опции темы

Текущее время: 14:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru