Как проверить есть ли символ в строке c
Перейти к содержимому

Как проверить есть ли символ в строке c

  • автор:

Проверка наличия символа в строке C++

Задача такова: необходимо ввести символ и проверить к какому алфавиту и регистру он принадлежит. С латинскими буквами все нормально,но проблемы возникают с кириллицей. Подскажите что не так в моей программе. Код данной задачи:

setlocale(LC_ALL,"Russian"); char i; cin >> i; char ENG [] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char eng [] = "abcdefghijklmnopqrstuvwxyz"; char RU [] = "АБВГДЭЕЖЗЫИКЛМНОПРСТУФХЦЧШЩЬЪЮЯЁ"; char ru [] = "aбвгдеёжзыиклмнопрстуфхцчшщьъюяё"; for (int h = 0;h if(i == eng[h]) > for (int b = 0;b <=33;b++) < if(i == RU[b])if(i == ru[b]) > return a.exec(); > 

Отслеживать
Alex Delarge
задан 10 ноя 2017 в 6:24
Alex Delarge Alex Delarge
13 1 1 золотой знак 1 1 серебряный знак 5 5 бронзовых знаков

Выложите тип кодировки вашего исходного файла. Какой тип кодировке в системе по умолчанию? Какой язык по умолчанию?

10 ноя 2017 в 6:33
Я к тому, что вы пишите в char*, а это, максимум ASCII
10 ноя 2017 в 6:34
Распечатайте размер русского алфавита. Мне кажется там будет не 33, а 66
10 ноя 2017 в 6:34

@pavel >>будет не 33, а 66
10 ноя 2017 в 6:36

В общем, нужна кодировка. Если не велосипедить, я бы использовал обычный std::string/std::wstring и делал бы find. Без всяких циклов.

Как проверить есть ли символ в строке c

Стандартная библиотека С++ также предоставляет ряд встроенных функций для работы с символами. В основном они связанны с проверкой символов:

  • isupper(c) : проверяет, является ли c заглавной буквой, по умолчанию от «A» до «Z»
  • islower(c) : проверяет, является ли c буквой нижнего регистра, по умолчанию от ‘a’ до ‘z’
  • isalpha(c) : проверяет, является ли c алфавитным символом
  • isdigit(c) : проверяет, является ли c цифрой от ‘0’ до ‘9’
  • isxdigit(c) : проверяет, является ли c шестнадцатеричной цифрой, от ‘0’ до ‘9’, от ‘a’ до ‘f’ или от ‘A’ до ‘F’
  • isalnum(c) : проверяет, является ли c алфавитно-цифровым символом; аналогично isisalpha(c) || isdigit(c)
  • isspace(c) : проверяет, является ли c пробелом (‘ ‘), символом перевода строки (‘\n’), возвратом каретки (‘\r’), перевод страницы (‘\f’), горизонтальная (‘\t’) или вертикальная (‘\v’) табуляция
  • isblank(c) : проверяет, является ли c пробелом (‘ ‘) или символом табуляция (‘\t’)
  • ispunct(c) : проверяет, является ли c символом пунктуации (один из следующих: _ < >[ ] # ( ) < >% : ; ? * + — / ^ & | ~ ! » brush:cpp;»> #include int main() < unsigned char letter ; if (std::isupper(letter)) std::cout

    Данные функции очень часто применяются при обработке строк. Рассмотрим прстейшую задачу — нам надо извлечь из некоторого текста (например, из строки «Phone number: +1(234)456-78-90» ) номер телефона:

    #include #include int main() < std::string text ; std::string phone; // строка для хранения номера for(unsigned i<>; i < text.length(); i++) < // проверяем, является ли символ цифрой if(std::isdigit(text[i])) < // добавляем в строку номера телефона phone += text[i]; >> std::cout 

    Здесь проходим по всем символам текста и, если символ представляет цифру, то заносим его в строку phone. Другая задача — нам надо сравнить две строки вне зависимости от регистра. С одной стороны, мы могли бы использовать простую операцию сравнения ==, которая также может сравнивать строки. Но если мы попытаемся сравнить две строки, в которых хотя бы один символ отличается по регистру, то они будут не равны:

    #include #include int main() < std::string word1 ; word1 = "hello"; std::string word2 ; if(word1 == word2) < std::cout else < std::cout >

    Результат данной программы:

    strings are not equal

    Чтобы организовать сравнение без учета регистра, мы могли бы переводить символы в верхний или нижний регистр и сравнивать их:

    #include #include int main() < std::string word1 ; std::string word2 ; bool is_equal; // равны ли строки if(word1.length() != word2.length()) < is_equal = false; >else < // сравниваем все символы for(unsigned i<>; i < word1.length(); i++) < // переводим символы в нижний регистр и сравниваем if(std::tolower(word1[i]) != std::tolower(word2[i])) < // если символы не равны, сбрасываем флаг равенства is_equal = false; break; // выходим из цикла >> > if(is_equal) < std::cout else < std::cout >

    В данном случае сначала сравниваем длину строк, так как если длины не равны, то сами строки тоже не равны. Далее в цикле проходим по всем символам обоих строк, переводим их в нижний регистр и сравниваем. Если хотя бы одна пара соответствующих символов не равна, то сбрасываем флаг равенства is_equal в false и выходим из цикла, поскольку строки в этом случае будут уже не равны, и дальше нет смысла сравнивать символы. Результат данной программы:

    HELLO and hello are equal

    Поиск символов в строке на языке C++

    Здравствуйте! Задали написать лабораторную на языке Borland C++. Задача стоит следующая: 10. Проверить, имеется ли в заданном тексте открывающиеся и закрывающиеся круглые скобки. Заранее спасибо.

    10 ответов

    25 декабря 2005 года
    28 / / 29.11.2005

    Originally posted by senator
    Здравствуйте! Задали написать лабораторную на языке Borland C++. Задача стоит следующая: 10. Проверить, имеется ли в заданном тексте открывающиеся и закрывающиеся круглые скобки. Заранее спасибо.

    26 декабря 2005 года
    32 / / 24.12.2005
    спасибо тебе добрый человек 🙂
    26 декабря 2005 года
    726 / / 14.01.2004
    Originally posted by linker3
    Кушай на здоровье 🙂

    Твой код равносилен этому:

    26 декабря 2005 года
    5.6K / / 13.08.2003
    вот вариант на С++, а не на С. так, для общего развития 🙂
    #include
    #include

    using namespace std;

    int main()
    string str;

    26 декабря 2005 года
    1.4K / / 03.12.2004
    Originally posted by squirL
    вот вариант на С++, а не на С. так, для общего развития 🙂
    #include
    #include

    using namespace std;

    int main()
    string str;

    Ну а ежели говорить о Borland C++, то наверно так:

    26 декабря 2005 года
    5.6K / / 13.08.2003
    Originally posted by AlexandrVSmirno
    Ну а ежели говорить о Borland C++
    :skip:

    26 декабря 2005 года
    1.4K / / 03.12.2004
    Originally posted by squirL

    Я это к тому, что сама фирма Borland настоятельно рекумендует пользоваться типом AnsiString. Хотя, конечно stl никто не отменял.

    26 декабря 2005 года
    28 / / 29.11.2005
    Originally posted by Matush
    Твой код равносилен этому:

    Я кенечно человек не придлирчивый к мелочам и всегда учитываю рациональное мнение, но в условие сказано что нада проверить есть ли закрывающая «И» открывающая скобки.
    Кстати я первый раз написал так как ты, но потом перечитал условие и. 🙂

    27 декабря 2005 года
    726 / / 14.01.2004

    Originally posted by linker3
    Я кенечно человек не придлирчивый к мелочам и всегда учитываю рациональное мнение, но в условие сказано что нада проверить есть ли закрывающая «И» открывающая скобки.
    Кстати я первый раз написал так как ты, но потом перечитал условие и. 🙂

    Ожидал встретить такой ответ. Поэто поясняю все по-порядку.

    Я написал «Твой код равносилен этому» — это означает, что приведенный мною код делает в точности тоже самое что и твой.

    Условие я тоже читать умею и что самое главное понимаю его. Поэтому становится ясным что приведенный тобою и всеми другими код — нерабочий (относительно условия).

    Если уловие понять так что надо проверить есть ли открывающие и закрывающие скобки и они расставлены верно, то вот код:

    Как проверить есть ли символ в строке c

    Регистрация: 30.11.2016

    Сообщений: 1

    [СИ] Определить наличие заданных символов в строке

    Помогите доделать программу. Мне нужно составить программу, которая определяет есть ли в строке буквы d,o,g и считает сколько раз они встречаются в ней.
    Вот моя программа:

    #include #include #include #include #include int main(void) if(s[i]=='o') if(s[i]=='g') if(s[i]=='D') if(s[i]=='O') if(s[i]=='G') > if(k==0) printf("Символ d встречается %d раз\n",&a); printf("Символ o встречается %d раз\n",&b); printf("Символ g встречается %d раз\n",&c); printf("Символ D встречается %d раз\n",&d); printf("Символ O встречается %d раз\n",&e); printf("Символ G встречается %d раз\n",&f); getch(); return 0; >

    Она не совсем работает. Когда я ввожу строку, например, »dog» то она пишет что в строке есть только символ ‘d’. Ну и не считает сколько раз они встречаются.

    Последний раз редактировалось LWM; 30.11.2016 в 13:31 .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *