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

Как посчитать количество элементов в строке

  • автор:

Подсчитать количество элемента и вывести [дубликат]

Пользователь должен сам задавать последовательность.
Дана строка символов; подсчитать, сколько раз среди символов строки встречается буква «x». В принципе, задача не сложная, просто не могу понять, что здесь не работает: Делю последовательность на отдельные элементы, затем задаю условие, что когда встречается этот элемент, при помощи count подсчитываю количество элементов.

n = list() n = input("Введите последовательность: ") n.split() i = 0 for i in n : i+=1 if (i=='x'): s.count('x') print(n) 

Отслеживать

48.1k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков

39) Количество строк Python ()

Count () – встроенная функция в Python. Он вернет общее количество заданного элемента в строке. Отсчет начинается от начала строки до конца. Также можно указать начальный и конечный индексы, с которых вы хотите начать поиск.

В этом уроке по Python вы узнаете:

  • Счетчик питонов
  • Синтаксис для PythonString Count ()
  • Пример 1: метод подсчета на строке
  • Пример 2: Подсчет вхождения символа в заданную строку
  • Пример 3: Подсчет вхождения подстроки в заданную строку

Синтаксис для PythonString Count ()

Синтаксис функции подсчета Python:

string.count(char or substring, start, end)

Параметры синтаксиса Python

  • Символ или подстрока: вы можете указать один символ или подстроку, которую вы хотите найти в данной строке. Он вернет вам количество символов или подстрок в данной строке.
  • start : (необязательно). Указывает начальный индекс, с которого начнется поиск. Если он не указан, он будет начинаться с 0. Например, вы хотите найти символ в середине строки. Вы можете указать начальное значение для вашей функции подсчета.
  • end : (необязательно) Указывает конечный индекс, где заканчивается поиск. Если не указан, он будет искать до конца списка или заданной строки. Например, вы не хотите сканировать всю строку и ограничивать поиск до определенной точки, вы можете задать значение end в вашей функции подсчета, и подсчет позаботится о поиске до этой точки.

ReturnValue

Метод count () возвращает целочисленное значение, то есть количество заданных элементов из заданной строки. Возвращает 0, если значение не найдено в данной строке.

Пример 1: метод подсчета на строке

В следующем примере показана работа функции count () для строки.

str1 = "Hello World" str_count1 = str1.count('o') # counting the character “o” in the givenstring print("The count of 'o' is", str_count1) str_count2 = str1.count('o', 0,5) print("The count of 'o' usingstart/end is", str_count2)
The count of 'o' is 2 The count of 'o' usingstart/end is 1

Пример 2: Подсчет вхождения символа в заданную строку

В следующем примере показано вхождение символа в заданную строку, а также с использованием индекса начала / конца.

str1 = "Welcome to Guru99 Tutorials!" str_count1 = str1.count('u') # counting the character “u” in the given string print("The count of 'u' is", str_count1) str_count2 = str1.count('u', 6,15) print("The count of 'u' usingstart/end is", str_count2)
The count of 'u' is 3 The count of 'u' usingstart/end is 2

Пример 3: Подсчет вхождения подстроки в заданную строку

В следующем примере показано наличие подстроки в заданной строке, а также использование start / endindex.

str1 = "Welcome to Guru99 - Free Training Tutorials and Videos for IT Courses" str_count1 = str1.count('to') # counting the substring “to” in the givenstring print("The count of 'to' is", str_count1) str_count2 = str1.count('to', 6,15) print("The count of 'to' usingstart/end is", str_count2)
The count of 'to' is 2 The count of 'to' usingstart/end is 1

Резюме:

  • Count () – встроенная функция в Python. Он вернет вам счет данного элемента в списке или строке.
  • В случае строки, отсчет начинается от начала строки до конца. Также можно указать начальный и конечный индексы, с которых вы хотите начать поиск.
  • Метод count () возвращает целочисленное значение.

Посчитать количество слов в строке

Для ввода строки нельзя использовать функцию cin в данном случае, поскольку эта функция осуществляет ввод строки до пробела или перевода строки. Поэтому воспользуемся методом get функции cin :

cin.get(УказательНаСтроку, МаксимальноеЧислоСимволов);

Условием окончания строки является символ с кодом равным 0 (нуль-символ, ‘\0’ ). После ввода строки организуем цикл по элементам строки до ее окончания. Перед циклом убираем пробелы, введенные в начале строки (до первого слова). Условием определения следующего слова в строке является наличие какого-то символа после пробела. Именно это условие увеличивает счетчик count на 1.

Реализация на 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
27
28

Количество слов в строке

Результат выполнения

Как оптимально подсчитать количество элементов в строке?

Как элегантно посчитать количество элементов? Может, как-то можно привести к TArray и просто считать Length() ? Должно получиться 6 в данном случае. Проблема в том, что мы не можем разделить по разделителям, т.к. ‘,’, так же как и кавычки, может находится внутри строки. А считать в цикле все открывающиеся и закрывающиеся кавычки работает, конечно, но как-то громозко и некрасиво выглядит.

Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
задан 14 мар 2015 в 12:42
2,455 3 3 золотых знака 19 19 серебряных знаков 35 35 бронзовых знаков

Можно все и не считать, а смотреть только если была кавычка в начале строки, то и в конце должна быть. Типа начало , » , конец должен быть », .

15 мар 2015 в 17:09

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

@VadimTukaev В Си-шной программе, которую Вы привели, есть небольшая идеологическая ошибка, которая связана с тем, что в паскалевском синтаксисе запись из первоначального условия задачи:

S := '[123, 2345, ''test'', ''str1, str2'', -1234, ''str3 ''is'' str4'']'; 

означает на самом деле, что S будет содержать:

[123, 2345, 'test', 'str1, str2', -1234, 'str3 'is' str4'] 

то есть никакого задвоения кавычек (таким способом в Паскале просто разрешается коллизия между обрамляющими и внутренними кавычками — крайние отбрасываются, а удвоенные внутренние — об-одиночиваются). Автор недаром привел строку в условии задачи именно в таком Паскалевском виде — через S := ‘. ‘ ;

Поэтому, если поправить эту входную строку в Вашей программе в соответствии с исходным заданием, то далее следует внести коррективы и в последующий код и вместо деления по модулю 4 (&& quotes % 4 == 0) проверять остаток от деления на 2 (&& quotes % 2 == 0) — то есть просто «на чётнось» пары кавычек, что в свою очередь позволяет использовать булевский флаг Quotes вместо int Quotes, например вот так:

var c : Char; s : String = '[123, 2345, ''test'', ''str1, str2'', -1234, ''str3 ''is'' str4'']'; Chunks : Integer = 1; Quotes : Boolean = false; begin Writeln(s); for c in s do case c of '''': Quotes := not Quotes; ',': if not Quotes then inc(Chunks) end; Writeln('Chunks = ', Chunks); Readln end. 

Согласитесь, всё же на Паскале-Дельфи Ваша исправленная программа выглядит более изящно! ;))) http://ideone.com/Pc2AtP

@VadimTukaev Я не менял название ВАШИХ переменных сознательно, чтобы не создавать Вам дополнительную интеллектуальную нагрузку во второстепенных вопросах — ведь основной вопрос заключался в том, что Вы решали ДРУГУЮ задачу c ДРУГИМИ исходными данными.

На этом я и сосредоточил Ваше внимание, а также предложил более красивое решение, вытекающее из исправления Ваших же ошибок. И, заметьте, на языке, для которого Автор и задавал вопрос!

Вдогонку — в ответ на Ваше возражение: Хотите с другой переменной, хотите, чтобы количество переменных было как у Вас, хотите, чтобы строка была Си-шная (PChar) — пожалуйста: http://ideone.com/Scnalo

Самое смешное что на Паскале/Делфи подладиться под Си — не проблема, он Паскаль может и так и так! А вот на Си — не всегда. Ну просто потому что Паскаль/Дельфи — язык более высокого уровня, при этом позволяющий спуститься вниз, вплоть до ассемблера или подняться вверх выше С++.

Что касается объявления переменных — то этим и отличаются языки Паскалевской ветки — строгостью во всем, в том числе и в объявлении переменных, что, как известно, приводит к более надежному коду. Недаром в конкурсе на создание единого языка программирования для Пентагона в полуфинал вышли три языка, и все три полуфиналиста основывались на Паскале, а си-образные языки в полуфинал не прошли вообще!

@Isaev Вы меня умиляете! Потом кто-нибудь опять выдаст решение теперь уже для этой, уточненной задачи, Вы снова внесёте уточнения, которые не были известны на предыдущем шаге! Эдак можно продолжать до бесконечности.

Потому что именно так решил Вашу задачу VadimTukaev (лишь только с поправкой на его ошибку в интерпретации исходных данных), а я лишь записал это решение более ясным языком (к тому же тем, на котором Вы спрашивали решение).

Вы или дайте полную РБНФ-грамматику Вашей задачи — чтобы мы сами без Ваших подсказок смогли решить что там ЕЩЁ может быть, а что нет, либо не морочьте себе (и нам) голову.

А вообще, если хотите послушать совет — не изобретайте велосипед, воспользуйтесь уже разработанной системой нотации, в которой все эти вопросы, которые последовательно встают перед Вами, давно решены и систематизированы:

Возьмите, например, Memo-поле, забейте туда последовательно все Ваши строки (те, из которых потом соберется результирующая строка):

123 2345 'test' 'str1, str2' -1234 str3 'i, s' str4 

и сделайте её авто-сборку:

 Caption := Memo1.Lines.DelimitedText; 

полюбуйтесь на неё в заголовке формы:

123,2345,'test',"'str1, str2'",-1234,"str3 'i, s' str4" 

Уясните, как на самом деле должна выглядеть собранная строка, а потом вновь автоматически разберите её на первоначальные подстроки — во второе Memo-поле (Memo2). Вот полный текст (2 Memo и 2 Buttona):

procedure TForm1.Button1Click(Sender: TObject); begin Caption := Memo1.Lines.DelimitedText; end; procedure TForm1.Button2Click(Sender: TObject); begin Memo2.Lines.DelimitedText := Caption; end; 

Именно по этим правилам сборки/разборки работают всякие системные ini-файлы, загрузки/выгрузки в Excel и т.д., а главное, что Ваша задача, после того как Вы вернётесь в мэйн-стрим, легко автоматизируется стандартными классами и имеет элементарный ответ: Memo2.Lines.Count, т.е. количество строк при разборке строки.

Постарайтесь подогнать под эту форму Вашу изначальную задачу — множество проблем избежите. и получите Профит! — всё уже полностью автоматизировано в Дельфи для неё!

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

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