Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.10.2012, 21:38
Аспирант
Отправить личное сообщение для Jeremen Посмотреть профиль Найти все сообщения от Jeremen
 
Регистрация: 03.02.2012
Сообщений: 45

Подсчета кол-ва вхождений каждого символа в строке.
Здрасте. Помогите с решением задачи: "Подсчета кол-ва вхождений каждого символа в строке". Вроде бы задача простая но что-то в голову не лезет ничего. Один из вариантов это набить массив всеми символы в строке по разу, а затем в цикле проверить каждый символ в этом массиве, но по моему туповатое решение какое-то, у кого какие идеи?
Ответить с цитированием
  #2 (permalink)  
Старый 28.10.2012, 22:14
Аватар для a_l
a_l a_l вне форума
Кандидат Javascript-наук
Отправить личное сообщение для a_l Посмотреть профиль Найти все сообщения от a_l
 
Регистрация: 15.09.2011
Сообщений: 143

Цитата:
Один из вариантов это набить массив всеми символы в строке по разу, а затем в цикле проверить каждый символ в этом массиве, но по моему туповатое решение какое-то, у кого какие идеи?
Ничего другого в голову не приходит.
Массив можно сделать из строки:
var alph= ("абвгдеё").split("");
Ответить с цитированием
  #3 (permalink)  
Старый 28.10.2012, 22:32
Аватар для lord2kim
Профессор
Отправить личное сообщение для lord2kim Посмотреть профиль Найти все сообщения от lord2kim
 
Регистрация: 03.05.2011
Сообщений: 848

a_l, строка и так является массивом
alert("абвгдеё".length);

только для обращения к элементам нужно использовать метод charAt() иначе не кроссбраузерно(((
Ответить с цитированием
  #4 (permalink)  
Старый 28.10.2012, 22:33
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

// регвыр символов, которые учавствуют в подсчёте.
var allowed = /[а-яё]/i;

// собираем информацию :
var results = Array.prototype.reduce.call("Подсчета кол-ва вхождений каждого символа в строке", function (data, letter) {

    if (allowed.test(letter)) {
    
        letter = letter.toLowerCase();
    
        if (data[letter] === undefined) {
            data[letter] = 0;
        }
    
        data[letter] += 1;
        
    }
    
    return data;

}, {});

// выводим:
for (var letter in results) {
    alert('Символ "' + letter + '" повторяется "' + results[letter] + '" раз.');
}
Ответить с цитированием
  #5 (permalink)  
Старый 29.10.2012, 01:05
Аватар для saturn
Аспирант
Отправить личное сообщение для saturn Посмотреть профиль Найти все сообщения от saturn
 
Регистрация: 08.09.2011
Сообщений: 67

Вот:

function count_char(str){
                count = str.length;
                var res = 0;
                for(i=0; i < count; i++){
                    if(str.charAt(i) == " "){
                        continue
                    }
                    res++;
                }
             return res;
            }
Ответить с цитированием
  #6 (permalink)  
Старый 29.10.2012, 09:49
Аватар для lord2kim
Профессор
Отправить личное сообщение для lord2kim Посмотреть профиль Найти все сообщения от lord2kim
 
Регистрация: 03.05.2011
Сообщений: 848

Дзен-трансгуманист, хорошо...массивом букв)
Ответить с цитированием
  #7 (permalink)  
Старый 29.10.2012, 11:34
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от lord2kim Посмотреть сообщение
Дзен-трансгуманист, хорошо...массивом букв)
не совсем массив, и не совсем букв
http://es5.javascript.ru/x8.html#x8.4
Ответить с цитированием
  #8 (permalink)  
Старый 31.10.2012, 02:06
Аватар для saturn
Аспирант
Отправить личное сообщение для saturn Посмотреть профиль Найти все сообщения от saturn
 
Регистрация: 08.09.2011
Сообщений: 67

Ну объясните тогда почему неправильное решение раз уж мне минус кто-то (жирный) поставил
и написал что "неправильное решение"

Так и хочется сказать: "Разуй глаза криворукое...!!!, имбицилу которое минусы лепит"

Последний раз редактировалось saturn, 31.10.2012 в 02:19.
Ответить с цитированием
  #9 (permalink)  
Старый 10.06.2014, 01:10
Новичок на форуме
Отправить личное сообщение для vigen Посмотреть профиль Найти все сообщения от vigen
 
Регистрация: 10.06.2014
Сообщений: 1

Подсчета кол-ва вхождений каждого символа в строке.
Сообщение от saturn Посмотреть сообщение
Вот:

function count_char(str){
                count = str.length;
                var res = 0;
                for(i=0; i < count; i++){
                    if(str.charAt(i) == " "){
                        continue
                    }
                    res++;
                }
             return res;
            }
Kратко, внятно, грамотно. Только одно замечание: в место "continue" "res++" надо.

Последний раз редактировалось vigen, 10.06.2014 в 01:12.
Ответить с цитированием
  #10 (permalink)  
Старый 10.06.2014, 01:34
Профессор
Отправить личное сообщение для depp Посмотреть профиль Найти все сообщения от depp
 
Регистрация: 22.04.2014
Сообщений: 151

var string = 'Подсчета кол-ва вхождений каждого символа в строке',
    sums = {};

string.split('').map(function(e){
    //e = e.toLowerCase(); - для включения регистронезавимисомти.
    sums[e] = !sums[e] ? 1 : sums[e]+1;
});
console.log(sums);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вбор числа после определенного символа в строке Jekel Серверные языки и технологии 2 21.03.2010 13:17