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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
killi
0 / 0 / 0
Регистрация: 10.01.2014
Сообщений: 2
#1

Удалить из строки все символы не являющиеся буквами латинского алфавита - C++

10.01.2014, 18:50. Просмотров 1828. Ответов 10
Метки нет (Все метки)

Ввести символьную строку. Удалить из строки все символы не являющиеся буквами латинского алфавита. Новых строк не создавать. Строку до и по-сле вывести на экран.. не через string.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2014, 18:50     Удалить из строки все символы не являющиеся буквами латинского алфавита
Посмотрите здесь:
Удалить из данной строки все символы, не являющиеся буквами латинского алфавита или цифрами, и заменив каждую C++
Из строки удалить все символы, кроме пробелов, не являющиеся буквами английского алфавита C++
Удалить из строки все символы не являющиеся латинскими буквами C++
C++ Удалить из строки все символы, не являющиеся латинскими буквами
C++ Создать очередь, содержащую любые символы. Удалить из очереди все символы, не являющиеся буквами или цифрами
C++ В строке удалить все символы не являющиеся буквами или цифрами
Удалить все символы в строке, не являющиеся буквами, используя функцию isalpha C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 555
11.01.2014, 00:08     Удалить из строки все символы не являющиеся буквами латинского алфавита #2
killi,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "iostream"
 
using namespace std;
 
int main()
{
    char s[255];
    int i=0;
    cout<<"Enter line:\n";
    cin.getline(s,255,'\n');
    while (i<=strlen(s)) {
        if ( (*(s+i)>=65 && *(s+i)<=90) || (*(s+i)>=97 && *(s+i)<=122) ) 
            cout<<*(s+i);
        i++;
    }
    system("pause");
    return 0;
}
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
11.01.2014, 00:16     Удалить из строки все символы не являющиеся буквами латинского алфавита #3
Цитата Сообщение от newb_programmer Посмотреть сообщение
if ( (*(s+i)>=65 && *(s+i)<=90) || (*(s+i)>=97 && *(s+i)<=122) )
что за шухер ... есть же std::isalpha
andryshka
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 81
11.01.2014, 00:24     Удалить из строки все символы не являющиеся буквами латинского алфавита #4
Цитата Сообщение от Tulosba Посмотреть сообщение
что за шухер ... есть же std::isalpha
А можно поподробнее?Я так понял то коду в таблице оно определяет является ли символ буквой латинского алфавита,я прав?
newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 555
11.01.2014, 00:48     Удалить из строки все символы не являющиеся буквами латинского алфавита #5
andryshka, как посоветовал уважаемый Tulosba, и если я правильно юзнул функцию-вот подкорректированый код (прога запустилась, все вывела правильно, но потом почему то повесила комп )
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "iostream"
 
using namespace std;
 
int main()
{
    char s[255];
    int i=0;
    cout<<"Enter line:\n";
    cin.getline(s,255,'\n');
    while (i<=strlen(s)) {
        if (isalpha(*(s+i)))
            cout<<*(s+i);
        i++;
    }
    system("pause");
    return 0;
}
andryshka
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 81
11.01.2014, 00:57     Удалить из строки все символы не являющиеся буквами латинского алфавита #6
Цитата Сообщение от newb_programmer Посмотреть сообщение
но потом почему то повесила комп )
Забавно...Я как-то в Паскале пробовал такую сделать через проверку кода тоже комп подвисал ,но там было
5 условий 'если'.
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
11.01.2014, 12:40     Удалить из строки все символы не являющиеся буквами латинского алфавита #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
newb_programmer, работа над ошибками:
1. Подключение стандартного заголовка должно быть с треугольными скобками, а не с кавычками.
2. Для std::isalpha нужно подключение хидера <cctype>, для std::strlen - <cstring>, для std::system - <cstdlib>. То, что работает из без них в конкретном случае, вовсе не значит, что будет работать на другом компиляторе.
3. Использование strlen() в цикле не эффективно. strlen() определяет длину строки путем поиска завершающего нуля, т.е. каждый раз проходит всю строку от начала до конца. Разумнее либо вычислить размер ДО цикла и использовать сравнение с константой, в которой этот размер сохранен, либо, еще лучше, использовать указатель на элемент строки, и проверять, что он не указывает на завершающий ноль ('\0').
4. По заданию ТС требуется не просто вывести на экран символы латиницы, а именно удалить ненужные из исходной строки, т.е. модифицировать сам массив s.
5. using namespace std; Об этом уже много раз говорилось на форуме, что использовать такое не стоит.
6. Значение, задающее длину строки лучше использовать в виде именованной константы.
7. Если третий аргумент для std::istream::getline() не задан, то по умолчанию как раз используется '\n'.

Кликните здесь для просмотра всего текста
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>
#include <cctype>
#include <cstdlib>
 
int main()
{
    const int kMaxLength = 256;
    char s[kMaxLength];
 
    std::cout<<"Enter line:";
    std::cin.getline(s,kMaxLength);
 
    char* c = s;
    for( char* p = s; *p; p++ )
    {
        if( std::isalpha(*p) )
        {
            *c = *p;
            c++;
        }
    } 
    *c = '\0';
 
    std::cout << s << std::endl;
    std::system("pause");
 
    return 0;
}
http://ideone.com/215MvZ
Ev[G]eN
Эксперт С++
5096 / 1534 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
11.01.2014, 12:55     Удалить из строки все символы не являющиеся буквами латинского алфавита #8
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
#include <iostream>
#include <cstring>
 
int main()
{
    const char *alphabet("qwertyuiopasdfghjklzxcvbnm");
    const size_t maximalStringLength(255);
 
    char string[maximalStringLength];
    std::cout << "Input the string: " << std::endl;
    gets_s(string);
 
    size_t deleteElementsCounter(0);
    size_t currentStringLength(strlen(string));
    for (size_t i = 0; i < currentStringLength; i++) {
        if (!strchr(alphabet, tolower(string[i]))) {
            deleteElementsCounter++;
        } else {
            string[i - deleteElementsCounter] = string[i];
        }
    }
    currentStringLength -= deleteElementsCounter;
 
    std::cout << "New string: " << std::endl;
    for (size_t i = 0; i < currentStringLength; i++) {
        putchar(string[i]);
    }
    std::cout << std::endl;
 
    std::system("pause");
    return 0;
}
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
11.01.2014, 13:30     Удалить из строки все символы не являющиеся буквами латинского алфавита #9
Ev[G]eN, не кросс-платформенно, в частности из gets_s(). Не хватает хедеров. И зачем выводить итоговую строку посимвольно?
newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 555
11.01.2014, 14:55     Удалить из строки все символы не являющиеся буквами латинского алфавита #10
Tulosba, спасибо учту=)
№3 особенно понравилось!
по №№5-6 можно поинтересоваться, почему? откуда ноги растут?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2014, 15:57     Удалить из строки все символы не являющиеся буквами латинского алфавита
Еще ссылки по теме:
Удалить все символы в строке, не являющиеся буквами и заменить множественные пробелы одним C++
C++ Строки: заменить в словах цифры малыми буквами латинского алфавита
C++ Переписать в начало строки символы не являющиеся буквами
C++ Заменить все символы, не являющиеся буквами или цифрами на апострофы

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
11.01.2014, 15:57     Удалить из строки все символы не являющиеся буквами латинского алфавита #11
Цитата Сообщение от newb_programmer Посмотреть сообщение
по №№5-6 можно поинтересоваться, почему? откуда ноги растут?
п.5:
раз: зачем часто писать std:: если можно один раз using namespace std?
два: using namespace std;
три: using namespace std
п.6:
В случае изменения размера проще поменять в одном месте значение константы, чем искать все места в коде. При этом давая символьное имя константе проще понять для чего она нужна. Для дополнительной инфы: магические числа.
Yandex
Объявления
11.01.2014, 15:57     Удалить из строки все символы не являющиеся буквами латинского алфавита
Ответ Создать тему
Опции темы

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