powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Число вхождений символа в строку
12 сообщений из 12, страница 1 из 1
Число вхождений символа в строку
    #38789888
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну т.е. для вычисления напр. к-ва запятых

aaa,bbb,ccc,ddd

А есть готовая ф-ция?

В VB6 годами использовал свою конструкцию

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Function ChNum(ByVal the_str As String, ch As String) As Integer
  'Возвращает число символов в строчке
  'задумано пока, что ch состоит из одного символа
  ChNum = 0
  Do
    If InStr(the_str, ch) = 0 Then
      Exit Do
    Else
      the_str = Right(the_str, Len(the_str) - InStr(the_str, ch))
      ChNum = ChNum + 1
    End If
  Loop
End Function


Оно и в .Net без замены кода прокатит конечно.

Не думая долго с учетом нек. опыта накалякал
Код: vbnet
1.
2.
3.
  Public Function ChNum(ByVal the_str As String, ByVal the_delim As String) As Integer
    Return UBound(Split(the_str, the_delim))
  End Function



Даже больше одного символа в the_delim будет работать.
Тупые варианты типа chnum ("2222222222222","222") не рассматриваем.

А совсем готовое что-то есть?
...
Рейтинг: 0 / 0
Число вхождений символа в строку
    #38789894
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77В VB6 годами использовал свою конструкциюя годами использовал
Код: c#
1.
Len(a)-Len(Replace(a,",","")
...
Рейтинг: 0 / 0
Число вхождений символа в строку
    #38789914
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Как думаешь, для одного символа твое быстрее чем то что я придумал со Split?

Пофиг наверно. Я ж с короткими строками работаю.

Для нескольких
aaa@@bbb@@ccc@@ddd
твое надо делить на len(@@), а это заморочки
Хотя речь сейчас об одном символе.

Не, но неужели готовой ф-ции нету?
Число вхождений substring в string?
...
Рейтинг: 0 / 0
Число вхождений символа в строку
    #38789919
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77твое надо делить на len(@@), а это заморочки
целая команда процессора.
не бери в голову
...
Рейтинг: 0 / 0
Число вхождений символа в строку
    #38789930
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если в подстроке символ один, можно использовать Count из LinQ

можно использовать регулярки

думаю, что оба способа будут медленнее, чем банальный Replace
...
Рейтинг: 0 / 0
Число вхождений символа в строку
    #38789941
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Не, но неужели готовой ф-ции нету?
Число вхождений substring в string?
Готовой нет. Видимо в MS решили что это редкая задача.

У решений через Split и Replace одинаковый недостаток - лишние временные объекты. Они короткоживущие и сборщик мусора их быстро удалит. Однако я бы предпочел решение без них. Например так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Function ChNum(ByVal str As String, ByVal ch As Char) As Integer
	Dim count As Integer = 0
	For I As Integer = 0 To str.Length-1
		If str(I) = ch Then count += 1
	Next
	Return count
End Function

Function ChNum(ByVal str As String, ByVal find As String) As Integer
	Dim count As Integer = 0, idx As Integer
	Do 
		idx = str.IndexOf(find, idx)
		If idx>=0 Then
			count += 1
			idx += find.Length
		End If
	Loop While idx>=0
	Return count
End Function
...
Рейтинг: 0 / 0
Число вхождений символа в строку
    #38790001
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileУ решений через Split и Replace одинаковый недостаток - лишние временные объекты. Они короткоживущие и сборщик мусора их быстро удалит.
А не перебираешь со сборщиком мусора?
Ведь в VB6 код такой же и нет там никакого сборщика.
Что бы там внутри ChNum не создавалось, все это удалится по завершении работы ChNum, разве не так?
...
Рейтинг: 0 / 0
Число вхождений символа в строку
    #38790011
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Что бы там внутри ChNum не создавалось, все это удалится по завершении работы ChNum, разве не так?
Не так. В .NET используется недетермированная модель управления памятью. Это означает что мы не знаем когда именно память выделенная в управляемой куче будет освобождена. Кроме того дело не в том когда именно будет освобождена память. Сборка мусора является одним из узких мест в .NET приложениях. Поэтому если возможность переписать код без лишних выделений памяти, то следует ей воспользоваться.

Дмитрий77А не перебираешь со сборщиком мусора?
Мой совет в какой-то мере является преждевременной оптимизацией. Реальный эффект на скорость приложения зависит от частоты вызовов функции ChNum.

Дмитрий77Ведь в VB6 код такой же и нет там никакого сборщика.
А в .NET есть и надо знать как он работает и какое влияние оказывает на приложениею
...
Рейтинг: 0 / 0
Число вхождений символа в строку
    #38790021
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileзависит от частоты вызовов функции ChNum.
Скажем так я ее часто употребляю (иначе б не разводил этот базар), но не так чтоб зацикленно непрерывно, чтоб это могло реально как то влиять.
Ладно убедил. Возьму твой первый вариант, в самый раз.
А свой вариант со Split оставлю про запас на случай делимитеров в несколько символов (не помню правда что я это где-то использую).
...
Рейтинг: 0 / 0
Число вхождений символа в строку
    #38790122
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
господа оптимизаторы, вы ещё не всё отжали. Где работа с unsafe указателями?
...
Рейтинг: 0 / 0
Число вхождений символа в строку
    #38790224
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилгоспода оптимизаторы, вы ещё не всё отжали. Где работа с unsafe указателями?

Точняк. Не успел сам предложить :-)
...
Рейтинг: 0 / 0
Число вхождений символа в строку
    #38790237
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Ну т.е. для вычисления напр. к-ва запятых

Код: c#
1.
2.
3.
4.
  static int GetCount(string str, char ch)
        {
            return str.Count(x => x == ch);
        }
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Число вхождений символа в строку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]