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

Проверка на принадлежность к алфавиту - C++

Восстановить пароль Регистрация
 
timaberezhnov
14 / 14 / 4
Регистрация: 10.09.2013
Сообщений: 67
30.03.2014, 23:03     Проверка на принадлежность к алфавиту #1
В общем увидел тему, решил помочь, не используя функции типа isalpha.
В итоге получилась вот такая раскоряка, которая к тому же ещё и кривовато работает
Помогите найти ошибки, а я, как Даша-следопыт, "скажу" Вам спасибо

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
const int N=256;
 
int main()
{
    int i=0;
    int j=0;
    char letter;
    char string[N];
    char result[N];
    cout<<"Ââåäèòå ñòðîêó: ";
    gets (string);
    for (i=0; i<N; i++) 
        for (letter='A'; letter<='Z'; letter++) if (string[i]==letter) { result[j]=string[i]; j++; };
    for (i=0; i<j; i++) cout<<result[i];
    
    system ("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6405 / 4871 / 447
Регистрация: 14.02.2011
Сообщений: 16,166
30.03.2014, 23:14     Проверка на принадлежность к алфавиту #2
Цитата Сообщение от timaberezhnov Посмотреть сообщение
for (letter='A'; letter<='Z'; letter++) if (string[i]==letter) { result[j]=string[i]; j++; };
0 то в конце кто будет добавлять чтобы строка получилась?
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (i=0; i<N; i++) 
   {
       for (letter='A'; letter<='Z'; letter++) 
         {
           if (string[i]==letter)
              { result[j]=string[i];
                j++; 
                break;
                }
            }
     }
 result[j]=0;
Добавлено через 2 минуты
Цитата Сообщение от timaberezhnov Посмотреть сообщение
for (i=0; i<N; i++)
цикл то нужно вести не до N
а до конца строки

C++
1
2
3
4
5
6
7
8
9
10
11
12
for (i=0; string[i]; i++) 
   {
       for (letter='A'; letter<='Z'; letter++) 
         {
           if (string[i]==letter)
              { result[j]=string[i];
                j++; 
                break;
                }
            }
     }
 result[j]=0;
timaberezhnov
14 / 14 / 4
Регистрация: 10.09.2013
Сообщений: 67
30.03.2014, 23:55  [ТС]     Проверка на принадлежность к алфавиту #3
ValeryS, супер А то у самого уже не варит то, что должно)

Итог :)
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
#include <iostream>
#include <conio.h>
using namespace std;
const int N=256;
 
int main()
{
    int i=0;
    int j=0;
    char letter;
    char string[N];
    char result[N];
    cout<<"Ââåäèòå ñòðîêó: ";
    gets (string);
    for (i=0; i<string[i]; i++) {
        for (letter='A'; letter<='z'; letter++) {
            if (string[i]==letter)
            {
               result[j]=string[i];
               j++;
            }
        }
    }    
    result[j]=0;
    for (i=0; i<j; i++) cout<<result[i];
    cout<<endl;
    
    getch();
    return 0;
}
ValeryS
Модератор
6405 / 4871 / 447
Регистрация: 14.02.2011
Сообщений: 16,166
31.03.2014, 00:01     Проверка на принадлежность к алфавиту #4
Цитата Сообщение от timaberezhnov Посмотреть сообщение
for (i=0; i<string[i]; i++)
это как????
тебе нужно крутить строку пока в ней не встретится 0
т е string[i] не равно 0
как я и написал
Цитата Сообщение от ValeryS Посмотреть сообщение
for (i=0; string[i]; i++)
не нравится так
напиши по другому
C++
1
for (i=0; string[i]!=0; i++)
Добавлено через 2 минуты
Цитата Сообщение от timaberezhnov Посмотреть сообщение
for (i=0; i<j; i++) cout<<result[i];
у тебя уже в result строка
проще написать

C++
1
cout<<result;
timaberezhnov
14 / 14 / 4
Регистрация: 10.09.2013
Сообщений: 67
31.03.2014, 00:07  [ТС]     Проверка на принадлежность к алфавиту #5
ValeryS, снова спасибо) Поспешил
Итоговый итог
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
#include <iostream>
#include <conio.h>
using namespace std;
const int N=256;
 
int main()
{
    int i=0;
    int j=0;
    char letter;
    char string[N];
    char result[N];
    cout<<"Ââåäèòå ñòðîêó: ";
    gets (string);
    for (i=0; string[i]; i++) {
        for (letter='A'; letter<='z'; letter++) {
            if (string[i]==letter)
            {
               result[j]=string[i];
               j++;
            }
        }
    }    
    result[j]=0;
    cout<<result<<endl;
    
    getch();
    return 0;
}


Добавлено через 1 минуту
Надеюсь больше нигде ошибок нет
IrineK
Заблокирован
31.03.2014, 08:09     Проверка на принадлежность к алфавиту #6
Цитата Сообщение от timaberezhnov Посмотреть сообщение
Проверка на принадлежность к алфавиту

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
#include <iostream>
using std::cout;
 
void Filter (char *dest, char *src, const char *alphabet)
{   int i = -1, j = -1, k;
    while (src[++i] != '\0')
    {   k = -1;
        while (alphabet[++k] != '\0')
            if (src[i] == alphabet[k])
            {   dest[++j] = src[i];
                break;
            }
    }
    dest[++j] = '\0';
}
 
int main()
{   const char *alphabet = "0123456789";
    char *s = "fjdgug0156rgugiuwwrgrg337";
    char *res = new char [strlen(s)+1];
 
    Filter (res, s, alphabet);
    cout << res;
 
    delete [] res;
    getchar();
    return 0;
}
ValeryS
Модератор
6405 / 4871 / 447
Регистрация: 14.02.2011
Сообщений: 16,166
31.03.2014, 09:06     Проверка на принадлежность к алфавиту #7
Цитата Сообщение от timaberezhnov Посмотреть сообщение
Надеюсь больше нигде ошибок нет
как таковых не вижу
но есть пара нюансов
Цитата Сообщение от timaberezhnov Посмотреть сообщение
letter='A'; letter<='z';
Между 'Z' 'a' и лежит еще несколько символов [ \ ] ^ _ `
http://ru.wikipedia.org/wiki/ASCII
они тоже попадут в результирующую строку
Цитата Сообщение от timaberezhnov Посмотреть сообщение
C++
1
2
3
4
5
if (string[i]==letter)
            {
               result[j]=string[i];
               j++;
            }
если letter будет равен 'A' то бесполезно покрутится еще куча циклов до 'z'
если равна то цикл можно и прервать вот для этого я и ввел break; который ты выбросил
а вообще нахождение в диапазоне можно сделать без цикла, подумай как
SatanaXIII
31.03.2014, 09:28
  #8

Не по теме:

Цитата Сообщение от timaberezhnov Посмотреть сообщение
я, как Даша-следопыт
Скажите еще пожалуйста что это за Даша-следопыт.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2014, 01:41     Проверка на принадлежность к алфавиту
Еще ссылки по теме:

Проверка на принадлежность некоторому классу C++
C++ Принадлежность точки к фигуре
C++ Определить принадлежность символа к тому или иному алфавиту
C++ Проверка на принадлежность к типу
Проверка на принадлежность элементов одного массива к другому C++

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

Или воспользуйтесь поиском по форуму:
timaberezhnov
14 / 14 / 4
Регистрация: 10.09.2013
Сообщений: 67
07.04.2014, 01:41  [ТС]     Проверка на принадлежность к алфавиту #9
SatanaXIII, вот
Yandex
Объявления
07.04.2014, 01:41     Проверка на принадлежность к алфавиту
Ответ Создать тему
Опции темы

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