Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 10.01.2014
Сообщений: 2

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

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

Студворк — интернет-сервис помощи студентам
Ввести символьную строку. Удалить из строки все символы не являющиеся буквами латинского алфавита. Новых строк не создавать. Строку до и по-сле вывести на экран.. не через string.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.01.2014, 18:50
Ответы с готовыми решениями:

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

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

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

10
 Аватар для newb_programmer
238 / 238 / 113
Регистрация: 03.09.2011
Сообщений: 558
11.01.2014, 00:08
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
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
11.01.2014, 00:16
Цитата Сообщение от newb_programmer Посмотреть сообщение
if ( (*(s+i)>=65 && *(s+i)<=90) || (*(s+i)>=97 && *(s+i)<=122) )
что за шухер ... есть же std::isalpha
0
2 / 2 / 1
Регистрация: 05.12.2013
Сообщений: 81
11.01.2014, 00:24
Цитата Сообщение от Tulosba Посмотреть сообщение
что за шухер ... есть же std::isalpha
А можно поподробнее?Я так понял то коду в таблице оно определяет является ли символ буквой латинского алфавита,я прав?
0
 Аватар для newb_programmer
238 / 238 / 113
Регистрация: 03.09.2011
Сообщений: 558
11.01.2014, 00:48
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
2 / 2 / 1
Регистрация: 05.12.2013
Сообщений: 81
11.01.2014, 00:57
Цитата Сообщение от newb_programmer Посмотреть сообщение
но потом почему то повесила комп )
Забавно...Я как-то в Паскале пробовал такую сделать через проверку кода тоже комп подвисал ,но там было
5 условий 'если'.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
11.01.2014, 12:40
Лучший ответ Сообщение было отмечено как решение

Решение

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
Mobile Software Engineer
Эксперт С++
 Аватар для Ev[G]eN
5381 / 1585 / 956
Регистрация: 23.01.2011
Сообщений: 3,214
11.01.2014, 12:55
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
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
11.01.2014, 13:30
Ev[G]eN, не кросс-платформенно, в частности из gets_s(). Не хватает хедеров. И зачем выводить итоговую строку посимвольно?
0
 Аватар для newb_programmer
238 / 238 / 113
Регистрация: 03.09.2011
Сообщений: 558
11.01.2014, 14:55
Tulosba, спасибо учту=)
№3 особенно понравилось!
по №№5-6 можно поинтересоваться, почему? откуда ноги растут?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
11.01.2014, 15:57
Цитата Сообщение от newb_programmer Посмотреть сообщение
по №№5-6 можно поинтересоваться, почему? откуда ноги растут?
п.5:
раз: Зачем часто писать std::, если можно один раз using namespace std?
два: using namespace std;
три: using namespace std
п.6:
В случае изменения размера проще поменять в одном месте значение константы, чем искать все места в коде. При этом давая символьное имя константе проще понять для чего она нужна. Для дополнительной инфы: магические числа.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.01.2014, 15:57
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru