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

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

Восстановить пароль Регистрация
 
Arh173
0 / 0 / 0
Регистрация: 23.09.2013
Сообщений: 21
24.12.2013, 17:01     Число символов строке не являющихся ни буквами, ни цифрами #1
На этой не деле, в срочном порядке нам дали несколько заданий в их числе: определить в строке число символов не являющихся ни буквами, ни цифрами. Как это понимать и выполнять?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2013, 17:01     Число символов строке не являющихся ни буквами, ни цифрами
Посмотрите здесь:

Сформировать из значений массива другой массив, расположив в нем сначала цифры, затем – буквы, затем - символы, не являющихся ни буквами, ни цифрами C++
C++ Вделить из строки подстроки с цифрами, буквами и прочими символами
Определить количество символов строки, не являющихся цифрами C++
C++ Преобразовать строку, удалив из неё все символы, не являющиеся буквами или цифрами
C++ Определить число вхождений в строку подстроки "аба", вывести символы строки, не являющейся буквами или цифрами
C++ Подсчитать количество различных символов, которые не являются буквами или цифрами, и вывести их на экран
C++ В строке удалить все символы не являющиеся буквами или цифрами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xoror
 Аватар для xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
24.12.2013, 17:27     Число символов строке не являющихся ни буквами, ни цифрами #2
Как то так это будет выглядеть на псевдокоде
Код
if ( !(символ==буква || символ==цифра) )
   число_символов++;
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,110
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
848 / 698 / 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;
}
Петррр
 Аватар для Петррр
5923 / 3360 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
26.12.2013, 17:46     Число символов строке не являющихся ни буквами, ни цифрами #6
XRoy, а зачем проверять еще isalpha() ?
XRoy
848 / 698 / 217
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
26.12.2013, 18:02     Число символов строке не являющихся ни буквами, ни цифрами #7
Петррр,
Вы правы, сначала использовал isalpha и isnum. Потом вспомнил про isalnum, но так и не удалил второе условие.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
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
3086 / 1861 / 278
Регистрация: 27.08.2010
Сообщений: 5,009
Записей в блоге: 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║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
26.12.2013, 19:04     Число символов строке не являющихся ни буквами, ни цифрами #10
gazlan, суть в том что-бы попрактиковаться в использовании STL.
Петррр
 Аватар для Петррр
5923 / 3360 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
26.12.2013, 19:21     Число символов строке не являющихся ни буквами, ни цифрами #11
outoftime, http://ideone.com/BVcNNo
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
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));
Петррр
 Аватар для Петррр
5923 / 3360 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
26.12.2013, 19:43     Число символов строке не являющихся ни буквами, ни цифрами #13
Они разные
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,110
26.12.2013, 19:48     Число символов строке не являющихся ни буквами, ни цифрами #14
Цитата Сообщение от Arh173 Посмотреть сообщение
Тут ошибка.
Боярин, просвети неуча.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
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:53     Число символов строке не являющихся ни буквами, ни цифрами
Еще ссылки по теме:

Подсчитать количество символов в строке, которые не являются цифрами C++
C++ Подсчитать в строке количество символов, которые не являются ни цифрами, ни буквами
C++ Удаление букв из строки с буквами и цифрами
C++ Строка: Сколько в массиве символов, не являющихся цифрами?
C++ Определить число элементов в массиве, являющихся гласными буквами латинского алфавита

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

Или воспользуйтесь поиском по форуму:
Петррр
 Аватар для Петррр
5923 / 3360 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
26.12.2013, 19:53     Число символов строке не являющихся ни буквами, ни цифрами #16
outoftime, с блэк джеком и лезбиянками - http://ideone.com/xvOj2k
Yandex
Объявления
26.12.2013, 19:53     Число символов строке не являющихся ни буквами, ни цифрами
Ответ Создать тему
Опции темы

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