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

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

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

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

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

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

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

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

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

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

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

Удалить из файла все записи, расположенные между заглавными буквами латинского алфавита и сами заглавные буквы - 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;
}
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 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
0
andryshka
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 81
11.01.2014, 00:24 #4
Цитата Сообщение от Tulosba Посмотреть сообщение
что за шухер ... есть же std::isalpha
А можно поподробнее?Я так понял то коду в таблице оно определяет является ли символ буквой латинского алфавита,я прав?
0
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;
}
0
andryshka
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 81
11.01.2014, 00:57 #6
Цитата Сообщение от newb_programmer Посмотреть сообщение
но потом почему то повесила комп )
Забавно...Я как-то в Паскале пробовал такую сделать через проверку кода тоже комп подвисал ,но там было
5 условий 'если'.
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 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
3
Ev[G]eN
Эксперт С++
5097 / 1535 / 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;
}
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
11.01.2014, 13:30 #9
Ev[G]eN, не кросс-платформенно, в частности из gets_s(). Не хватает хедеров. И зачем выводить итоговую строку посимвольно?
0
newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 555
11.01.2014, 14:55 #10
Tulosba, спасибо учту=)
№3 особенно понравилось!
по №№5-6 можно поинтересоваться, почему? откуда ноги растут?
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 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:
В случае изменения размера проще поменять в одном месте значение константы, чем искать все места в коде. При этом давая символьное имя константе проще понять для чего она нужна. Для дополнительной инфы: магические числа.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2014, 15:57
Привет! Вот еще темы с ответами:

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

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

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

Строки: заменить в словах цифры малыми буквами латинского алфавита - C++
Напишите, пожалуйста, программу! Из текстового файла, состоящего из 6-7 строк сформировать массив слов. Заменить в словах цифры малыми...


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

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

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