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

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

Войти
Регистрация
Восстановить пароль
 
 
Arh173
0 / 0 / 0
Регистрация: 23.09.2013
Сообщений: 21
#1

Число символов строке не являющихся ни буквами, ни цифрами - C++

24.12.2013, 17:01. Просмотров 478. Ответов 15
Метки нет (Все метки)

На этой не деле, в срочном порядке нам дали несколько заданий в их числе: определить в строке число символов не являющихся ни буквами, ни цифрами. Как это понимать и выполнять?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2013, 17:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Число символов строке не являющихся ни буквами, ни цифрами (C++):

Подсчитать в строке количество символов, которые не являются ни цифрами, ни буквами - C++
Ребят помогите плиз сделать в визио 2008 (пустой фаил, среда С++) задача звучит так: нужно посчитать колличество символов в строке, которые...

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

Строка: Сколько в массиве символов, не являющихся цифрами? - C++
Создать динамический массив типа unsigned char . Число элементов и их значения ввести с клавиатуры . Вывести массив на экран.Сколько в...

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

Определить число элементов в массиве, являющихся гласными буквами латинского алфавита - C++
Задан символьный массив размера N. Определить число элементов в массиве являющихся гласными буквами латинского алфавита.

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
24.12.2013, 17:27 #2
Как то так это будет выглядеть на псевдокоде
Код
if ( !(символ==буква || символ==цифра) )
   число_символов++;
dimcoder
Полярный
458 / 431 / 67
Регистрация: 11.09.2011
Сообщений: 1,129
24.12.2013, 17:52 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    string s;
    int k = 0;
    
    cin >> s;
    
    for (int i = 0; i < s.length(); i++)
        if ( !( (s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= '0' && s[i] <= '9') ) )
            k++;
    cout << k << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
Arh173
0 / 0 / 0
Регистрация: 23.09.2013
Сообщений: 21
26.12.2013, 17:18  [ТС] #4
Тут ошибка.
XRoy
852 / 702 / 217
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
26.12.2013, 17:37 #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
#include <iostream>
#include <cctype>
#include <string>
#include<windows>
 
using namespace std;
 
int main(int argc, char const *argv[])
{
    string str;
    int i, n, counter = 0;
 
    getline(cin, str);
 
    for ( n = str.length(), i = 0; i < n; i++ )
    {
        if ( !( isalnum(str[i]) || isalpha(str[i]) ) )
        {
            counter++;
        }
    }
 
    cout << counter;
        system("PAUSE");
    return 0;
}
Петррр
5949 / 3386 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
26.12.2013, 17:46 #6
XRoy, а зачем проверять еще isalpha() ?
XRoy
852 / 702 / 217
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
26.12.2013, 18:02 #7
Петррр,
Вы правы, сначала использовал isalpha и isnum. Потом вспомнил про isalnum, но так и не удалил второе условие.
outoftime
║XLR8║
509 / 431 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
26.12.2013, 18:18 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
#include <string>
#include <cctype>
 
int main()
{
    std::string raw = "ljasdf 98oUF 9o*&UFifyo fadfu87Tf78PY)F987YfYf76%Tf987";
    using namespace std::placeholders;
    std::cout << (raw.size() - std::count_if(raw.begin(), raw.end(), 
        static_cast<std::function<bool(char)>>(std::isalnum)));
    
    return EXIT_SUCCESS;
}
Идея понятна, осталось исправить ошибку (:
Bash
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
49
50
51
52
53
54
55
56
D:\Projects\c++\help>make
g++ cyberforum.cpp -o run.exe -std=c++11 -I"%BOOST_HOME%" -L"%BOOST_HOME%\lib"
cyberforum.cpp: In function 'int main()':
cyberforum.cpp:13:54: error: no matching function for call to 'std::function<boo
l(char)>::function(<unresolved overloaded function type>)'
   static_cast<std::function<bool(char)>>(std::isalnum)));
                                                      ^
cyberforum.cpp:13:54: note: candidates are:
In file included from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algo.h
:66:0,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\algorithm:62,
                 from cyberforum.cpp:3:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\functional:2255:2: note: template<cla
ss _Functor, class> std::function<_Res(_ArgTypes ...)>::function(_Functor)
  function(_Functor);
  ^
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\functional:2255:2: note:   template a
rgument deduction/substitution failed:
cyberforum.cpp:13:54: note:   couldn't deduce template parameter '_Functor'
   static_cast<std::function<bool(char)>>(std::isalnum)));
                                                      ^
In file included from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algo.h
:66:0,
                 from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\algorithm:62,
                 from cyberforum.cpp:3:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\functional:2230:7: note: std::functio
n<_Res(_ArgTypes ...)>::function(std::function<_Res(_ArgTypes ...)>&&) [with _Re
s = bool; _ArgTypes = {char}]
       function(function&& __x) : _Function_base()
       ^
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\functional:2230:7: note:   no known c
onversion for argument 1 from '<unresolved overloaded function type>' to 'std::f
unction<bool(char)>&&'
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\functional:2433:5: note: std::functio
n<_Res(_ArgTypes ...)>::function(const std::function<_Res(_ArgTypes ...)>&) [wit
h _Res = bool; _ArgTypes = {char}]
     function<_Res(_ArgTypes...)>::
     ^
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\functional:2433:5: note:   no known c
onversion for argument 1 from '<unresolved overloaded function type>' to 'const
std::function<bool(char)>&'
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\functional:2210:7: note: std::functio
n<_Res(_ArgTypes ...)>::function(std::nullptr_t) [with _Res = bool; _ArgTypes =
{char}; std::nullptr_t = std::nullptr_t]
       function(nullptr_t) noexcept
       ^
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\functional:2210:7: note:   no known c
onversion for argument 1 from '<unresolved overloaded function type>' to 'std::n
ullptr_t'
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\functional:2203:7: note: std::functio
n<_Res(_ArgTypes ...)>::function() [with _Res = bool; _ArgTypes = {char}]
       function() noexcept
       ^
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\functional:2203:7: note:   candidate
expects 0 arguments, 1 provided
make: *** [i>?all] Error 1
Добавлено через 5 минут
Помогите поправить (:

Добавлено через 3 минуты
Да, я не хочу использовать лямбду, есть решение с преобразованием типа?
gazlan
3131 / 1906 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
26.12.2013, 18:31 #9
C++
1
2
3
4
5
6
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
#include <string>
#include <cctype>
Все это правильно и быстро делается через единственную таблицу размером 256 байт, в которой определены классы символов. Сканируем строку и делаем подсчет чего угодно: цифр, букв, разделителей, гласных, шипящих итп. для любого, определенного пользователем набора.
outoftime
║XLR8║
509 / 431 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
26.12.2013, 19:04 #10
gazlan, суть в том что-бы попрактиковаться в использовании STL.
Петррр
5949 / 3386 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
26.12.2013, 19:21 #11
outoftime, http://ideone.com/BVcNNo
outoftime
║XLR8║
509 / 431 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
26.12.2013, 19:43 #12
Петррр, Будь добр расскажи в чем фишка, какая разница между std::isalnum и isalnum ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
#include <string>
#include <cctype>
 
int main()
{
    std::string raw = "ljasdf 98oUF 9o*&UFifyo fadfu87Tf78PY)F987YfYf76%Tf987";
    using namespace std::placeholders;
    std::cout << (raw.size() - std::count_if(raw.begin(), raw.end(), 
        static_cast<std::function<bool(char)>>(isalnum)));
    
    return EXIT_SUCCESS;
}
Работает на ура.

Добавлено через 1 минуту
Кстати, без явного преобразование также пашет.

Добавлено через 12 секунд
C++
1
std::cout << (raw.size() - std::count_if(raw.begin(), raw.end(), isalnum));
Петррр
5949 / 3386 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
26.12.2013, 19:43 #13
Они разные
dimcoder
Полярный
458 / 431 / 67
Регистрация: 11.09.2011
Сообщений: 1,129
26.12.2013, 19:48 #14
Цитата Сообщение от Arh173 Посмотреть сообщение
Тут ошибка.
Боярин, просвети неуча.
outoftime
║XLR8║
509 / 431 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
26.12.2013, 19:52 #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <algorithm>
#include <functional>
#include <string>
#include <cctype>
 
int main()
{
    std::string raw = "ljasdf 98oUF 9o*&UFifyo fadfu87Tf78PY)F987YfYf76%Tf987";
    std::cout << (raw.size() - std::count_if(raw.begin(), raw.end(), isalnum));
    
    return EXIT_SUCCESS;
}
Добавлено через 1 минуту
2 строки, кто короче?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2013, 19:52
Привет! Вот еще темы с ответами:

Подсчитать количество различных символов, которые не являются буквами или цифрами, и вывести их на экран - C++
Задание: Дана строка. Подсчитать количество различных символов, которые не являются буквами или цифрами, и вывести их на экран. Как это...

Подсчитать количество символов в строке, которые не являются цифрами - C++
Подсчитать количество символов в строке,которые не являются цифарми. Помогите пожалуйста, срочно)

Определить число вхождений в строку подстроки "аба", вывести символы строки, не являющейся буквами или цифрами - C++
решить нужно в течении часа определить число вхождений в строку подстроки &quot;аба&quot; вывести символы строки не являющейся буквами или...

Удаление букв из строки с буквами и цифрами - C++
как удалить букву из ряда цифр например: 1123123ы84750щ13498м93 =&gt; 1123123847501349893


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

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

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