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

Дана строка. Вычеркнуть из нее все русские заглавные буквы - C++

Восстановить пароль Регистрация
 
Алина1234
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 38
08.07.2015, 10:06     Дана строка. Вычеркнуть из нее все русские заглавные буквы #1
Помогите составить код задачи: дана строка. Вычеркнуть из нее все русские заглавные буквы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2015, 10:06     Дана строка. Вычеркнуть из нее все русские заглавные буквы
Посмотрите здесь:

Дана символьная строка, удалить из нее путем сдвига все цифры C++
с клавиатуры вводится строка. выберите из нее все буквы А(а) до I(i) . строчные преобразуйте в прописные и отсортируйте в алфавитном порядке C++
C++ CharToOem заглавные русские буквы
Дана строка символов до точки. Выделить в ней все русские буквы, сделав их заглавными C++
Вводится строка. Все буквы в строке преобразовать в заглавные C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
D_Gon
 Аватар для D_Gon
22 / 11 / 5
Регистрация: 09.07.2015
Сообщений: 47
11.07.2015, 08:53     Дана строка. Вычеркнуть из нее все русские заглавные буквы #2
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
#include <iostream>
#include <string>
#include <clocale>
 
void f( std::string &s ){
    
    char rus[] = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
    
    for ( int i = 0; i < s.size(); ++i )
        for ( int j = 0; rus[ j ] != '\0'; ++j )
            if ( s[ i ] == rus[ j ] )
                s.erase( i, 1 );
}
 
int main(){
 
    std::string s = "Папа, Мама";
    f( s );
    
    setlocale(LC_ALL, "Russian");
    std::cout << s << std::endl;
 
    return 0;
}
DrunkProgrammer
37 / 27 / 6
Регистрация: 09.06.2015
Сообщений: 100
11.07.2015, 10:22     Дана строка. Вычеркнуть из нее все русские заглавные буквы #3
Цитата Сообщение от D_Gon Посмотреть сообщение
C++
1
2
3
4
5
char rus[] = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
for ( int i = 0; i < s.size(); ++i )
    for ( int j = 0; rus[ j ] != '\0'; ++j )
        if ( s[ i ] == rus[ j ] )
            s.erase( i, 1 );
А не проще будет по коду символа?

C++
1
2
3
4
5
6
 for (int i = 0; i < s.size(); i++){ 
    if((s[i] > 'А') && (s[i] < 'Я')){ 
        s.erase(i,1); 
        break;
    }
}
D_Gon
 Аватар для D_Gon
22 / 11 / 5
Регистрация: 09.07.2015
Сообщений: 47
11.07.2015, 10:35     Дана строка. Вычеркнуть из нее все русские заглавные буквы #4
Цитата Сообщение от DrunkProgrammer Посмотреть сообщение
А не проще будет по коду символа?
Я просто не уверен что в заданой кодировке они подряд будут идти.
S_el
1906 / 1501 / 295
Регистрация: 15.12.2013
Сообщений: 5,913
11.07.2015, 10:37     Дана строка. Вычеркнуть из нее все русские заглавные буквы #5
Цитата Сообщение от DrunkProgrammer Посмотреть сообщение
А не проще будет по коду символа?
Проще.А еще можно STL использовать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
# include <algorithm>
#include <clocale>
 
int main(){
    setlocale(LC_ALL, "Russian");
    std::string s = "Папа, Мама";
 
    auto p = std::remove_if(s.begin(),s.end(),[](char &p)
    {
        return (p >= 'А') && (p <= 'Я');
    });
    s.erase(p,s.end());
    std::cout << s << std::endl;
 
    return 0;
}
DrunkProgrammer
37 / 27 / 6
Регистрация: 09.06.2015
Сообщений: 100
11.07.2015, 10:38     Дана строка. Вычеркнуть из нее все русские заглавные буквы #6
Цитата Сообщение от DrunkProgrammer Посмотреть сообщение
C++
1
2
3
4
5
6
for (int i = 0; i < s.size(); i++){ 
     if((s[i] > 'А') && (s[i] < 'Я')){ 
        s.erase(i,1); 
    break;
    }
}
Извиняюсь, Ошибочка.

C++
1
2
3
4
5
6
for (int i = 0; i < s.size(); i++){ 
    if((s[i] > 'А') && (s[i] < 'Я')){ 
        s.erase(i,1); 
        i--;
    }
}
к тому же
Цитата Сообщение от D_Gon Посмотреть сообщение
C++
1
2
3
4
for ( int i = 0; i < s.size(); ++i )
    for ( int j = 0; rus[ j ] != '\0'; ++j )
         if ( s[ i ] == rus[ j ] )
            s.erase( i, 1 );
работать не будет, если пойдут подряд 2 заглавные буквы и вторая будет находиться "раньше" первой в массиве rus. Ну и вылет за границы массива, если строка будет оканчиваться на последовательность из нескольких заглавных русских символов
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
11.07.2015, 10:46     Дана строка. Вычеркнуть из нее все русские заглавные буквы #7
S_el, можно и STL, ну суть то та же что там цикл, что в STL тот же цикл
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2015, 11:20     Дана строка. Вычеркнуть из нее все русские заглавные буквы
Еще ссылки по теме:

C++ Вводится строка. Все буквы в строке преобразовать в заглавные
C++ Дана строка. Заменить в ней все строчные (латинские и русские) буквы соответствующими заглавными.
C++ Дана строка. Удалить из нее все лишние пробелы

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

Или воспользуйтесь поиском по форуму:
S_el
1906 / 1501 / 295
Регистрация: 15.12.2013
Сообщений: 5,913
11.07.2015, 11:20     Дана строка. Вычеркнуть из нее все русские заглавные буквы #8
Цитата Сообщение от D_Gon Посмотреть сообщение
Я просто не уверен что в заданой кодировке они подряд будут идти.
По идее они должны подряд идти в любой кодировке.

Цитата Сообщение от Ev[G]eN Посмотреть сообщение
Можно и STL, ну суть то та же
Конечно.Но кода меньше
Yandex
Объявления
11.07.2015, 11:20     Дана строка. Вычеркнуть из нее все русские заглавные буквы
Ответ Создать тему
Опции темы

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