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

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

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

Ввести символьную строку. Удалить из строки все символы не являющиеся буквами латинского алфавита. Новых строк не создавать. Строку до и по-сле вывести на экран.. не через string.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2014, 18:50
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Удалить из строки все символы не являющиеся буквами латинского алфавита (C++):

Удалить из данной строки все символы, не являющиеся буквами латинского алфавита или цифрами, и заменив каждую
как написать код к данной задачке? Известно, что в исходной строке...

Из строки удалить все символы, кроме пробелов, не являющиеся буквами английского алфавита
Разработать консольное приложение. 1. Во введенной строке после k-го символа...

Удалить из строки все символы, не являющиеся буквами
1. Дана символьная строка. Удалить из нее все символы не являющиеся буквами.

Удалить из строки все символы не являющиеся латинскими буквами
вести строку символов. удалить из строки все символы не являющиеся латинскими...

Удалить из строки все символы, не являющиеся латинскими буквами
Вывести строку символов. Удалить из строки все символы, не являющиеся...

Удалить из строки все символы, не являющиеся буквами или цифрами
Дана строка символов. Преобразовать строку, удалив из нее все символы, не...

10
newb_programmer
237 / 237 / 113
Регистрация: 03.09.2011
Сообщений: 558
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;
}
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
11.01.2014, 00:16 #3
Цитата Сообщение от newb_programmer Посмотреть сообщение
if ( (*(s+i)>=65 && *(s+i)<=90) || (*(s+i)>=97 && *(s+i)<=122) )
что за шухер ... есть же std::isalpha
0
andryshka
2 / 2 / 1
Регистрация: 05.12.2013
Сообщений: 81
11.01.2014, 00:24 #4
Цитата Сообщение от Tulosba Посмотреть сообщение
что за шухер ... есть же std::isalpha
А можно поподробнее?Я так понял то коду в таблице оно определяет является ли символ буквой латинского алфавита,я прав?
0
newb_programmer
237 / 237 / 113
Регистрация: 03.09.2011
Сообщений: 558
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;
}
0
andryshka
2 / 2 / 1
Регистрация: 05.12.2013
Сообщений: 81
11.01.2014, 00:57 #6
Цитата Сообщение от newb_programmer Посмотреть сообщение
но потом почему то повесила комп )
Забавно...Я как-то в Паскале пробовал такую сделать через проверку кода тоже комп подвисал ,но там было
5 условий 'если'.
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
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
3
Ev[G]eN
iOS/Android Developer
Эксперт С++
5115 / 1553 / 950
Регистрация: 23.01.2011
Сообщений: 3,179
Завершенные тесты: 1
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;
}
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
11.01.2014, 13:30 #9
Ev[G]eN, не кросс-платформенно, в частности из gets_s(). Не хватает хедеров. И зачем выводить итоговую строку посимвольно?
0
newb_programmer
237 / 237 / 113
Регистрация: 03.09.2011
Сообщений: 558
11.01.2014, 14:55 #10
Tulosba, спасибо учту=)
№3 особенно понравилось!
по №№5-6 можно поинтересоваться, почему? откуда ноги растут?
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
11.01.2014, 15:57 #11
Цитата Сообщение от newb_programmer Посмотреть сообщение
по №№5-6 можно поинтересоваться, почему? откуда ноги растут?
п.5:
раз: http://www.cyberforum.ru/cpp-beginners/thread150880.html
два: http://www.cyberforum.ru/cpp-beginners/thread353503.html
три: http://www.cyberforum.ru/cpp-beginners/thread935237.html
п.6:
В случае изменения размера проще поменять в одном месте значение константы, чем искать все места в коде. При этом давая символьное имя константе проще понять для чего она нужна. Для дополнительной инфы: магические числа.
1
11.01.2014, 15:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2014, 15:57
Привет! Вот еще темы с решениями:

Создать очередь, содержащую любые символы. Удалить из очереди все символы, не являющиеся буквами или цифрами
Используя динамические структуры, реализовать следующие задания....

Удалить из файла все записи, расположенные между заглавными буквами латинского алфавита и сами заглавные буквы
Дан символьный файл. Удалить из него все записи, расположенные между заглавными...

В строке удалить все символы не являющиеся буквами или цифрами
Помогите написать одно ( или два ) задания : 1)В строке удалить все символы не...

Удалить все символы в строке, не являющиеся буквами, используя функцию isalpha
На Borland c\c++ .Спасибо


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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