Как узнать номер символа в строке
БлогNot. C++: как узнать номер символа в строке
C++: как узнать номер символа в строке
Как известно, для определения позиции символа c в заданной указателем строке s можно использовать стандартную функцию strchr(s,c) , которая вернёт указатель на найденное вхождение символа или пустой указатель NULL , если ничего не найдено. Нетрудно реализовать подобную функцию и самостоятельно:
char *strchr (char *s, int c) < //Pointer to symbol c in string s or NULL if c not found in s while (*s) < if (*s==c) return s; s++; >return NULL; >
А вот для определения номера символа, под которым символ c находится в строке s (не забываем, что символы в строках C и C++ нумеруются с нуля) готовой функции нет. Наверное, она и не нужна — можно, например, вычитать указатели на найденный стандартной функцией strchr символ и на начало строки. Однако, при сложении-вычитании указателей можно как выйти за сегмент памяти (если используете старенькие DOS-эмуляторы), так и нажить другие трудноуловимые ошибки. Лучше написать собственную реализацию такой функции, назовём её strchrn . Она вернёт номер найденного символа (начиная с нуля) или -1, если символ c не встречается в строке s .
int strchrn (char *s, int c) < //Number of symbol c in string s or -1 if c not found in s int n=-1; while (*s) < n++; if (*s==c) return n; s++; >return -1; >
Задачу нетрудно расширить — например, выяснить номер первого из символов строки t , который встречается в строке s . Функция будет называться strchrs и использует предыдущую функцию:
int strchrs(char *s, char *t) < //Number of first symbol from t in s or -1, if no matches while (*t) < int r=strchrn(s,*t); if (r>-1) return r; t++; > return -1; >
Простейший тест всех трёх функций мог бы быть таким (дополнительно подключается стандартная библиотека ввода-вывода оператором #include ):
void main ()
20.04.2013, 12:18 [24026 просмотров]
Найти индекс символа в строке Python
В этом посте мы обсудим, как найти индекс первого вхождения символа в строку в Python.
1. Использование find() функция
Стандартным решением для поиска позиции символа в строке является использование find() функция. Возвращает индекс первого вхождения в строку, где найден символ. Он возвращается -1 когда персонаж не найден.
if __name__ == ‘__main__’ :
index = s . find ( ch )
if index != — 1 :
print ( f «Found character ‘
print ( «Character not found» )
2. Использование index() функция
В качестве альтернативы вы можете использовать index() функция, похожая на find() функционировать, но повышает ValueError когда персонаж не найден.
if __name__ == ‘__main__’ :
index = s . index ( ch )
print ( f «Found character ‘
print ( «Character not found» )
3. Использование enumerate() функция
Вот решение с использованием enumerate() работа с генераторами. Это полезно, когда вам нужно найти положение всех символов в строке, которые удовлетворяют условию.
if __name__ == ‘__main__’ :
indexes = [ i for i , c in enumerate ( s ) if c == ch ]
print ( f «Found character ‘
4. Использование more_itertools.locate() функция
Наконец, вы можете использовать locate() функцию от more_itertools Модуль Python для поиска символов в строке. Он возвращает индекс каждого символа в строке, для которой возвращается указанный предикат. True .
import more_itertools
if __name__ == ‘__main__’ :
index = next ( more_itertools . locate ( s , lambda x : x == ch ) )
if index != — 1 :
print ( f «Found character ‘
print ( «Character not found» )
Это все, что касается поиска индекса символа в строке в Python.
Оценить этот пост
Средний рейтинг 4.97 /5. Подсчет голосов: 31
Голосов пока нет! Будьте первым, кто оценит этот пост.
Сожалеем, что этот пост не оказался для вас полезным!
Расскажите, как мы можем улучшить этот пост?
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂
Подписывайся
2 Комментарии
Большинство голосов
Новейшие Самый старый
Встроенные отзывы
Просмотреть все комментарии
Просмотр комментариев
Загрузить больше комментариев
Просматривать
Подпишитесь на новые публикации
- Все проблемы
- Практика DSA
- 100 самых популярных задач
- 50 лучших классических задач
- Лучшие алгоритмы
- Компилятор С/С++
- Компилятор Java
- Компилятор Python
- Компилятор JavaScript
- компилятор PHP
- Компилятор C#
- Свяжитесь с нами
- Политика конфиденциальности
- условия обслуживания
- Подпишитесь на новые публикации
Techie Delight © 2023 Все права защищены.
Этот веб-сайт использует файлы cookie. Используя этот сайт, вы соглашаетесь с использованием файлов cookie, нашей политикой, условиями авторского права и другими условиями. Читайте наши Политика конфиденциальности. Понятно
Узнать номер символа в строке.
Здравствуйте. Помогите, пожалуйста! Задача Подсчитать кол-во символов в строке после последнего вхождения символа <>. Вот моя программа:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
#include #include using namespace std; int main() { const int max=80; int n,j,m=0,kol; char charg1; cout"BBEDUTE CUMBO/I:"; cin>>charg1; cout"CUMBO/I:"charg1endlendl; char str1[]="Это первая строка"; kol=strlen(str1);coutkolendl; for (j=0;jkol;j++) {if (str1[j]==charg1) n=j;} cout"HOMEP CUMBO/IA "charg1": "nendl; for (j=n;jstrlen(str1);j++) m++; cout"CHIC/IO POC/IE: "m; return 0; }
Где усл оператор не срабатывает должным образом, но если вместо charg1 поставить параметр ‘p’ , всё работает как надо. (Почему?)
Так вот, как можно узнать номер символа charg в строке?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Узнать позицию символа в строке string
Привет, как узнать индекс символа ‘l’ в строке string ? string s = "Hello";
Поменяйте чётные символы между строками, и после каждого четного символа добавьте его номер в исходной строке
Запросите у пользователя 2 строки длинной от 4 до 20 символов.Поменяйте чётные символы между.
Замена символа в строке на число соответствующему номеру по порядку вхождения этого символа в строку
В заданной строке заменить каждый символ «*» числом, соответствующим номеру по порядку вхождения.
12243 / 7373 / 1734
Регистрация: 25.07.2009
Сообщений: 13,521
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
#include #include int main(){ const int MAX_LEN(256); char buf[MAX_LEN], * p, ch; std::cout "String: "; std::cin.getline(buf, MAX_LEN); std::cout "Character: "; std::cin >> ch; if ( ( p = strrchr(buf, ch) ) == NULL ){ std::cerr "Character not found in string!" std::endl; return 1; } std::cout ( strlen(buf) - (p - buf) - 1 ) " characters after last " ch std::endl; return 0; }
Регистрация: 05.12.2010
Сообщений: 34
Спасибо, В этом решении для меня есть незнакомые моменты, поэтому возникли вопросы :
1)почему p-buf возвращает положительное значение?
2)как при вычитании символов получается число?
3)почему в последней формуле нельзя заменить buf на strlen(buf)?
4)почему *p,а не p?
12243 / 7373 / 1734
Регистрация: 25.07.2009
Сообщений: 13,521
Роман_1985, ну давайте по порядку:
Функция strrchr() возвращает указатель на последнее вхождение символа в строку. buf — фактически указатель на первый элемент строки. Соответственно p — buf даёт количество символов между первым и найденным, то есть индекс найденного символа. strlen() возвращает длинну строки. Если от неё отнять количество символов до найденного включительно — получится количество оставшихся символов. Кстати, только-что дошло:
std::cout ( strlen(p) - 1 ) " characters after last " ch std::endl;
Получить коды символов в строке
Как у переменной типа string по индексу получить коды символов? Понятно что обращаться в цикле к индексу. Как именно получить код и какой тип данных возвращается, int? Если можно дайте ссылку на описание функции.
Отслеживать
задан 11 июн 2017 в 20:09
860 4 4 золотых знака 18 18 серебряных знаков 39 39 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Воспользуйтесь функцией charAt . Она принимает индекс символа и возвращает символ (тип char ). Его можно привести к типу int , если хотите.
String s = "Hello!"; char firstChar = s.charAt(0); // firstChar == 'H' int firstCharInt = (int) firstChar;
Отслеживать
ответ дан 11 июн 2017 в 20:11
9,325 6 6 золотых знаков 23 23 серебряных знака 57 57 бронзовых знаков
Здравствуйте, а нельзя сделать так: String str = «Hello»; int charInt = (int) str[0]; ?
11 июн 2017 в 20:16
К сожалению, нельзя, через квадратные скобки можно обращаться только к массивам.
11 июн 2017 в 20:17
А по какой таблице я получаю этот код?
11 июн 2017 в 20:18
И почему лучше не приводить? Я пробую написать hash функцию и получаю для начала код символа.
11 июн 2017 в 20:19
В Java всё в Юникоде
11 июн 2017 в 20:19
char a = ‘ϒ’; int b = (int)a; System.out.print(b) //978 номер символа
Отслеживать
ответ дан 16 янв в 13:44
у символа Y номер 978? это в какой кодировке?
16 янв в 14:14
encoding utf-8. В Джаве все в уникоде
17 янв в 15:09
-
Важное на Мете
Связанные
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.