artem1artem, здравствуйте! Решил ответить на ваш вопрос не совсем обычным образом. Я потратил два часа на ответ, стараясь сделать его как можно более всеобъемлющим. Символы строки являющиеся буквами всегда латинские, но это можно поправить. Надеюсь, вам и кому-то еще будет интересно. Здесь накопленный мной опыт и комментарии:
Вариант 1:
| 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
33
34
35
36
37
38
39
40
41
| /*
Дата и время написания программы:
17.09.2018
20:24
Условие задачи:
Удалить из строки все символы, не являющиеся буквами или цифрами.
Алгоритм:
1. Объявляем переменную строкового типа.
2. Вводим строку.
3. Пробегаем по строке (справа налево).
4. С помощью функции isalnum() проверяем, что символ неявляется буквой или цифрой.
5. Удаляем соответствующие символы с помощью функци erase().
6. Выводим получившуюся строку.
Решение:
*/
#include <iostream>
#include <string>
#include <cctype>
using namespace std; //Пространство имен
int main() {
string s; //Объявляем переменную строкового типа (исходная строка)
cout << "Enter a string:\n";
getline(cin, s); //Вводим строку с клавиатуры
for (int i = s.length() - 1; i >= 0; i--) { //Пробегаем по строке циклом (справа налево, чтобы не нарушить индексацию при удалении)
if (!isalnum(s[i])) { //Условие, что символ не является буквой или цифрой
s.erase(i, 1); //Удаляем символы, не являющиеся буквой или цифрой
}
}
cout << "Output of the program: " << s << "\n";
system("pause"); //Функция задержки экрана консоли
return 0; //Функция main() возвратила ноль при успешном выполнении программы (то есть, в коде выше ошибок не было)
} |
|
Вариант 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| /*
Дата и время написания программы:
17.09.2018
20:35
Условие задачи:
Удалить из строки все символы, не являющиеся буквами или цифрами.
Алгоритм:
1. Объявляем символьную строку (массив типа char).
2. Объявляем пустую строку типа string (хранит искомый результат).
3. Вводим строку с консоль.
4. Пробегаем по строке циклом (слева направо) и накапливаем результат в новой строке (имитация удаления).
5. Выводим искомый результат (строку после удаления) на экран.
Решение:
*/
#include <iostream>
#include <cstring>
using namespace std; //Пространство имен
int main() {
char s[255]; //Объявляем сивольную строку (массив типа char)
string str = ""; //Объявляем пустую строку (накапливает только буквы и цифры)
cout << "Enter a string:\n";
cin.getline(s, 255); //Вводим строку с клавиатуры
//gets(s); //Ввод строки можно также осуществить с помощью функции gets()
for (int i = 0; i < strlen(s); i++) { //Пробегаем по строке циклом (слева направо)
if ((s[i] >= '0' && s[i] <= '9') ||
(s[i] >= 'a' && s[i] <= 'z') ||
(s[i] >= 'A' && s[i] <= 'Z')) { //Если символ латинская буква или цифра
str += s[i]; //Записываем в новую строку символы, являющиеся буквами или цифрами
}
}
cout << "Output of the program: " << str << "\n"; //Выводим результат (строку после удаления) в консоль
system("pause"); //Функция задержки экрана консоли
return 0; //Функция main() возвратила ноль при успешном выполнении программы (то есть, в коде выше ошибок не было)
} |
|
Вариант 3:
| 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
33
34
35
36
37
38
39
40
41
42
43
| /*
Дата и время написания программы:
17.09.2018
20:50
Условие задачи:
Удалить из строки все символы, не являющиеся буквами или цифрами.
Алгоритм:
1. Объявляем переменную строкового типа.
2. Вводим строку.
3. Пробегаем по строке (слева направо).
4. С помощью функции isalnum() проверяем, что символ неявляется буквой или цифрой.
5. Удаляем соответствующие символы с помощью функци erase().
6. Сдигаем индекс на единицу (так как удаление производилось при проходе слева направо).
7. Выводим получившуюся строку.
Решение:
*/
#include <iostream>
#include <string>
#include <cctype>
using namespace std; //Пространство имен
int main() {
string s; //Объявляем переменную строкового типа (исходная строка)
cout << "Enter a string:\n";
getline(cin, s); //Вводим строку с клавиатуры
for (int i = 0; s[i] != '\0'; i++) { //Пробегаем по строке циклом (слева направо)
if (!isalnum(s[i])) { //Условие, что символ не является буквой или цифрой
s.erase(i, 1); //Удаляем найденный символ
i--; //Сдвигаем индекс после удаления
}
}
cout << "Output of the program: " << s << "\n"; //Выводим результат (строку после удаления) в консоль
system("pause"); //Функция задержки экрана консоли
return 0; //Функция main() возвратила ноль при успешном выполнении программы (то есть, в коде выше ошибок не было)
} |
|
Вариант 4:
| 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
33
34
35
36
37
38
| /*
Дата и время написания программы:
17.09.2018
21:10
Условие задачи:
Удалить из строки все символы, не являющиеся буквами или цифрами.
Алгоритм:
1. Объявляем переменную строкового типа.
2. Формируем паттерн удаления (с помощью регулярных выражений).
3. Вводим строку.
4. Удаляем нужные символы с помощью функции regex_replace().
5. Выводим получившуюся строку.
Решение:
*/
#include <iostream>
#include <string>
#include <regex>
#include <cctype>
using namespace std; //Пространство имен
int main() {
string s; //Объявляем переменную строкового типа (исходная строка)
regex e("[^A-Za-z0-9]+"); //Определяем в регулярном выражении символы, неявляющиеся буквами или цифрами
cout << "Enter a string:\n";
getline(cin, s); //Вводим строку с клавиатуры
s = regex_replace(s, regex(e), ""); //Удаляем символы (заменяем на пустые) с помощью функции regex_replace()
cout << "Output of the program: " << s << "\n"; //Выводим результат (строку после удаления) в консоль
system("pause"); //Функция задержки экрана консоли
return 0; //Функция main() возвратила ноль при успешном выполнении программы (то есть, в коде выше ошибок не было)
} |
|
Вариант 5:
| 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
33
34
35
36
37
38
| /*
Дата и время написания программы:
17.09.2018
21:21
Условие задачи:
Удалить из строки все символы, не являющиеся буквами или цифрами.
Алгоритм:
1. Объявляем переменную строкового типа.
2. Вводим исходную строку.
3. Удаляем нужные символы с помощью итераторов, лямбда-выражений, функций remove_if() и erase().
4. Выводим получившуюся строку.
Решение:
*/
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <cctype>
using namespace std; //Пространство имен
int main() {
string s; //Объявляем переменную строкового типа (исходная строка)
cout << "Enter a string:\n";
getline(cin, s); //Вводим строку с клавиатуры
auto it = remove_if(s.begin(), s.end(), [&](char ch) { return !isalnum(ch); }); //Нужна поддержка стандарта С++11
s.erase(it, s.end()); //Удаляем символы, не являющиеся буквами или цифрами
cout << "Output of the program: " << s << "\n"; //Выводим результат (строку после удаления) в консоль
system("pause"); //Функция задержки экрана консоли
return 0; //Функция main() возвратила ноль при успешном выполнении программы (то есть, в коде выше ошибок не было)
} |
|
Вариант 6:
| 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
33
34
35
36
37
38
39
40
| /*
Дата и время написания программы:
17.09.2018
21:30
Условие задачи:
Удалить из строки все символы, не являющиеся буквами или цифрами.
Алгоритм:
1. Объявляем переменную строкового типа.
2. Вводим исходную строку.
3. Удаляем символы, не являющиеся буквами или цифрами с помощью идиомы erase-remove и вспомогательной функции f().
4. Выводим получившуюся строку.
Решение:
*/
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
using namespace std; //Пространство имен
bool f(char ch) { //Функция проверки является ли заданный символ буквой иил цифрой
return !isalnum(ch);
}
int main() {
string s; //Объявляем переменную строкового типа (исходная строка)
cout << "Enter a string:\n";
getline(cin, s); //Вводим строку с клавиатуры
s.erase(remove_if(s.begin(), s.end(), f), s.end()); //Удаляем символы, не являющиеся буквами или цифрами
cout << "Output of the program: " << s << "\n"; //Выводим результат (строку после удаления) в консоль
system("pause"); //Функция задержки экрана консоли
return 0; //Функция main() возвратила ноль при успешном выполнении программы (то есть, в коде выше ошибок не было)
} |
|
Вариант 7:
| 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
33
34
35
36
37
| /*
Дата и время написания программы:
17.09.2018
21:40
Условие задачи:
Удалить из строки все символы, не являющиеся буквами или цифрами.
Алгоритм:
1. Объявляем переменную строкового типа.
2. Вводим исходную строку.
3. Копируем символы, не являющиеся буквами или цифрами с помощью функции copy_if().
4. Выводим получившуюся строку.
Решение:
*/
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
using namespace std; //Пространство имен
int main() {
string s; //Объявляем переменную строкового типа (исходная строка)
char res[255];
cout << "Enter a string:\n";
getline(cin, s); //Вводим строку с клавиатуры
copy_if(s.begin(), s.end(), res, [&](char ch) { return isalnum(ch); }); //Копируем символы, не являющиеся буквами или цифрами
cout << "Output of the program: " << res << "\n"; //Выводим результат (строку после удаления) в консоль
system("pause"); //Функция задержки экрана консоли
return 0; //Функция main() возвратила ноль при успешном выполнении программы (то есть, в коде выше ошибок не было)
} |
|
Вариант 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
33
34
35
36
37
38
39
40
41
42
43
| /*
Дата и время написания программы:
17.09.2018
22:00
Условие задачи:
Удалить из строки все символы, не являющиеся буквами или цифрами.
Алгоритм:
1. Объявляем символьную строку (массив типа char).
2. Объявляем два указателя на исходную строку.
3. Пробегаем указателем p по строке и накапливаем новую строку в указателе q (соблюдая условия задачи)
4. Выводим результат на экран.
Решение:
*/
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std; //Пространство имен
int main() {
char s[255]; //Объявляем сивольную строку (массив типа char)
cout << "Enter a string:\n";
gets(s); //Вводим строку с клавиатуры
//cin.getline(s, 255); //Ввод строки можно также осуществить с помощью функции getline()
char *p = s, *q = s;
while (*p) { //Пробегаем указателем по строке
if (isalnum(*p)) { //Если символ является буквой или цифрой
*q++ = *p; //Накапливаем строку в новом указателе
}
++p;
}
*q = '\0'; //Завершение новой строки нуль-терминатором (строка оканчивается символом '\0')
cout << "Output of the program: " << s << "\n"; //Выводим результат (строку после удаления) в консоль
system("pause"); //Функция задержки экрана консоли
return 0; //Функция main() возвратила ноль при успешном выполнении программы (то есть, в коде выше ошибок не было)
} |
|
Вариант 9:
| 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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| /*
Дата и время написания программы:
17.09.2018
22:30
Условие задачи:
Удалить из строки все символы, не являющиеся буквами или цифрами.
Алгоритм:
1. Вводим исходную строку.
2. Пробегаем циклом по строке (справа налево)
3. Удаляем символы с помощью определенной функции (сдвиг элементов массива)
4. Выводим получившуюся строку.
Решение:
*/
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
void del(string &s, int index, int size) { //Функция удаления элемента по заданному индексу
for (int i = index; i < size - 1; i++) {
s[i] = s[i+1]; //Сдвигаем элементы
}
s[size-1] = '\0';
}
int main() {
int len; //Объявляем целочисленную переменную (хранит длину исходной строки)
string s; //Объявляем строку
cout << "Enter a string:\n";
getline(cin, s); //Вводим строку с клавиатуры
len = s.length(); //Определяем длину строки
for (int i = len - 1; i >= 0; i--) { //Пробегаем циклом по строке (справа налево, чтобы не учитывать индекс при удалении)
if (!isalnum(s[i])) { //Если символ не является буквой или цифрой
del(s, i, len); //Удаляем символ с помощью сдвига
}
}
cout << "Output of the program: " << s << "\n"; //Выводим результат (строку после удаления) в консоль
system("pause"); //Функция задержки экрана консоли
return 0; //Функция main() возвратила ноль при успешном выполнении программы (то есть, в коде выше ошибок не было)
} |
|
Добавлено через 38 минут
Вариант 10:
| 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
33
34
35
36
37
38
39
40
41
42
| /*
Дата и время написания программы:
17.09.2018
23:08
Условие задачи:
Удалить из строки все символы, не являющиеся буквами или цифрами.
Алгоритм:
1. Объявляем переменную строкового типа.
2. Вводим строку.
3. Пробегаем циклом по строке (слева направо).
4. Пропускаем удаляемые символы с помощью continue, а оставшиеся - выводим.
Решение:
*/
#include <iostream>
#include <string>
#include <cctype>
using namespace std; //Пространство имен
int main() {
string s; //Объявляем переменную строкового типа (исходная строка)
cout << "Enter a string:\n";
getline(cin, s); //Вводим строку с клавиатуры
cout << "Output of the program:\n";
for (int i = 0; i < s.length(); i++) { //Пробегаем по строке циклом (слева направо)
if (!isalnum(s[i])) { //Если символ не является буквой или цифрой
continue; //Пропускаем символ
} else {
cout << s[i]; //Выводим искомую строку на экран
}
}
cout << "\n";
system("pause"); //Функция задержки экрана консоли
return 0; //Функция main() возвратила ноль при успешном выполнении программы (то есть, в коде выше ошибок не было)
} |
|
1
|