Как из строки взять по два целочисленных символа и перемножить их?
Дана строка: String str = «2347865238»; Понимаю, что вытащить индексы ячеек можно с помощью метода substring(int beginIndex, int endIndex) , но не могу сообразить, как описать в цикле это. Подскажите, пожалуйста, с пояснением.
Отслеживать
5,057 17 17 серебряных знаков 27 27 бронзовых знаков
задан 1 июн 2017 в 13:31
481 1 1 золотой знак 8 8 серебряных знаков 29 29 бронзовых знаков
str.charAt(0) — получаете первый символ. Вычитаете из него символ ‘0’ — получаете число из отрезка 0..9 . Вот что вы дальше хотите сделать не очень понятно.
1 июн 2017 в 13:35
Надо перемножить двузначные числа, 23*47, 47*86 и так далее
Как сравнить два символа в java
Для сравнения символов в Java можно использовать оператор сравнения == Например:
char c1 = 'a'; char c2 = 'b'; if (c1 == c2) System.out.println("Characters are equal"); > else System.out.println("Characters are not equal"); >
Также можно использовать метод equals класса Character :
Character c1 = 'a'; Character c2 = 'b'; if (c1.equals(c2)) System.out.println("Characters are equal"); > else System.out.println("Characters are not equal"); >
Обратите внимание, что если необходимо сравнить символы, которые хранятся в строках, то нужно использовать метод charAt класса String :
String str = "abc"; char c = 'a'; if (str.charAt(0) == c) System.out.println("Characters are equal"); > else System.out.println("Characters are not equal"); >
Как в Си выяснить, является ли введённая 1) строка 2) символ в верхнем или же нижнем регистре?
Не могу понять как из буквы сделать цифру, то есть чтобы символ соответствовал символу в таблице ASCII; и потом, как с помощью массива сделать ввод данных, то есть не char а полноценный string, чтобы вводилась сразу строка а не символ
char name; scanf("%s",name); for (i=1;i<=strlen(name);i++)< if (name >= 97 && name if (name >= 65 && name <=90) < printf("upper"); name +=32; printf("now it is lower"); >>
- Вопрос задан более трёх лет назад
- 608 просмотров
1 комментарий
Оценить 1 комментарий
Я вообще не понял, что ты пытаешься сделать. Для преобразования в верхний/нижний регистр есть функции toupper()/tolower(), а для определения регистра символа есть функции isupper()/islower(), а для цифр — isdigit().
Решения вопроса 0
Ответы на вопрос 2
Просто объявите переменную в виде char name[100];
После обращайтесь не к name, а к name[i]
Ну и чтобы получить числовое значение символа достаточно написать int(c) или в вашем случае int(name[i])
Ответ написан более трёх лет назад
Нравится 1 2 комментария
У него язык C, int(c) — это работает только для C++.
Точно? Но тогда вот это все равно работает:
char c = ‘C’;
int z = c;
Я только что на pure c проверил.
Программист на «си с крестами» и не только
> как с помощью массива сделать ввод данных, то есть не char а полноценный string, чтобы вводилась сразу строка а не символ
char s[100]; scanf("%99s", s);
Ну и заодно как обработать эту строку.
len = strlen(s); for (i = 0; i < len; ++i) < name = s[i]; // обработай как-нибудь наш name… >
Далее буду пинать ваш код.
> scanf(«%s»,name);
Противная фишка Си как учебного языка. Чтобы сделать простейшие вещи, надо знать сложные концепции. Все параметры scanf, соответствующие подстановкам — %d, %s и т.д. — указатели. И тип этого указателя соответствует типу в форматной строке.
Из-за этого ваш код — явное AV (Access Violation); чтобы ввести один символ, надо scanf(«%c», &name); . Чтобы ввести кучу символов — я написал выше.
Почему для s не нужен знак адреса? А потому, что массив — изначально указатель.
Вторая и третья противные фишки — принципиальная небезопасность многих функций и сложности с организацией простейшего консольного диалога. Допустим, Си из коробки не позволяет расширять строку по мере ввода, и важно ограничивать длину ввода, иначе введёшь 100 символов — будет в лучшем случае AV. А если мы введём больше 99 символов — считаем 99 и остановимся, и дальнейшие scanf’ы начнут читать «хвост».
> for (i=1;i <=strlen(name);i++) <
Явное O(n²) по процессорному времени на пустом месте. strlen ищет заканчивающий ‘\0’ , т.е. его сложность O(n). Надо запомнить длину в отдельную переменную.
Возможен и второй способ — через указатели.
char* p; for (p = s; *p != '\0' ++p)
Это более эффективный, но и более продвинутый способ.
Python: Извлечение символов из строки
Иногда нужно получить один символ из строки. Например, если сайт знает имя и фамилию пользователя, и в какой-то момент требуется вывести эту информацию в формате A. Ivanov. Для этого компьютеру потребуется взять первый символ из имени. В Python есть подходящая операция, которую мы изучим сегодня.
Представим, что из имени Alexander нужно вывести на экран только первую букву. Это выглядит так:
first_name = 'Alexander' print(first_name[0]) # => A
Операция с квадратными скобками с цифрой извлекает элемент по индексу — позицией символа внутри строки. Индексы начинаются с 0 почти во всех языках программирования. Поэтому, чтобы получить первый символ, нужно указать индекс 0 . Индекс последнего элемента равен длине строки минус единица. Обращение к индексу за пределами строки приведет к ошибке:
# Длина строки 9, поэтому последний индекс — это 8 first_name = 'Alexander' print(first_name[8]) # => r print(first_name[9]) IndexError: string index out of range
Чтобы лучше закрепить новые знания, посмотрите на код ниже и подумайте, что он выдаст:
magic = '\nyou' print(magic[1]) # => ?
Бывают и нестандартные ситуации. Например, нужно вывести элемент из конца, причем из выражения с большим количеством символов. В этом случае можно воспользоваться отрицательным индексом, который облегчит работу программиста.
Допустимо использовать отрицательные индексы. В этом случае идет обращение к символам, начиная с конца строки. -1 — индекс последнего символа, -2 — предпоследнего и так далее. В отличие от прямой индексации, обратный отсчет идет от -1 :
first_name = 'Alexander' print(first_name[-1]) # => r
Индексом может быть не только конкретное число, но и значение переменной. Посмотрите на пример ниже. Здесь мы записали индекс внутри квадратных скобок не числом, а переменной. Такой код приведет к тому же результату — выводу на экран символа A:
first_name = 'Alexander' index = 0 print(first_name[index]) # => A
Чтобы выводить из выражения лишь некоторые символы, не нужно писать большое количество строк кода — достаточно извлечь элемент с помощью индекса. Также можно пользоваться отрицательным индексом, чтобы легче выводить символы с конца выражения. Далее разберемся, как с помощью этих знаний можно извлекать подстроки из строки.
Задание
Выведите на экран последний символ строки, находящейся в переменной name
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Определения
- Индекс — позиция символа внутри строки.