Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.03.2019, 09:29
Новичок на форуме
Отправить личное сообщение для fluorke Посмотреть профиль Найти все сообщения от fluorke
 
Регистрация: 21.03.2019
Сообщений: 3

строка, изменить регистр заглавных букв всех слов
Добрейшего денечка уважаемые. У нас есть строка аля "Вася петя маша таня", между слов пробелы, нужно сделать буквы имен заглавными, при помощи toUpperCase(), indexOf() и for/while. Другими методами пользоваться нельзя. Без массивов.

Индексы пробелов я нашел по шаблону с учебника:

var str = "Ослик Иа-Иа посмотрел на виадук"; // ищем в этой строке
var target = "Иа"; // цель поиска

var pos = 0;
while (true) {
  var foundPos = str.indexOf(target, pos);
  if (foundPos == -1) break;

  alert( foundPos ); // нашли на этой позиции
  pos = foundPos + 1; // продолжить поиск со следующей
}


Дальше я пытаюсь как то манипулировать newStroke = str.slice(...) + str[foundPos].toUpperCase() - не получается.

То есть алгоритм такой - я нашел все позиции пробелов, могу заменить буквы на заглавные, но создать всю строку - печаль, беда.

Последний раз редактировалось fluorke, 21.03.2019 в 10:11.
Ответить с цитированием
  #2 (permalink)  
Старый 21.03.2019, 10:04
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 2,951

Сообщение от fluorke
нужно сделать буквы имен
Нужно сделать все имена с заглавных букв или вообще все слова?

Если второе, то я бы сделал так:
function func(string) {
    let position;
    const result = string.split('');
    while ((position = string.indexOf(' ', position + 1)) >= 0)
        result.splice(++position, 1, result[position--].toUpperCase());

    return result.join('');
};

alert(
    func('Вася петя маша таня')
);
Ответить с цитированием
  #3 (permalink)  
Старый 21.03.2019, 10:10
Новичок на форуме
Отправить личное сообщение для fluorke Посмотреть профиль Найти все сообщения от fluorke
 
Регистрация: 21.03.2019
Сообщений: 3

Все первые буквы, всех слов - заглавными, массивами мы не пользуемся, просто цикл и строка. Спасибо.
Ответить с цитированием
  #4 (permalink)  
Старый 21.03.2019, 10:29
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 2,951

fluorke,
function func(string) {
    let position = -1;
    do {
        const before = string.substring(0, position + 1); //with space
        const needle = string.substr(position + 1, 1);
        const after = string.substring(position + 2);

        string = before + needle.toUpperCase() + after;
    } while ((position = string.indexOf(' ', position + 1)) >= 0);

    return string;
};

alert(
    func('вася петя маша таня')
);

Последний раз редактировалось Nexus, 21.03.2019 в 10:33.
Ответить с цитированием
  #5 (permalink)  
Старый 21.03.2019, 10:36
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,887

при помощи toUpperCase(), indexOf() и for/while. Другими методами пользоваться нельзя
var str = "Вася петя маша таня";
var strNew = "";
var pos = 0;
while(pos < str.length) {
    var foundPos = str.indexOf(" ", pos);
    if (foundPos == -1) break;
    for(var i = pos; i <= foundPos;i++) {
         strNew = strNew + str[i]
    }
    pos = foundPos + 1;
    strNew = strNew + str[pos].toUpperCase();
    pos++;
}
for(var i = pos; i < str.length;i++) {
         strNew = strNew + str[i]
}
alert(strNew);
Ответить с цитированием
  #6 (permalink)  
Старый 21.03.2019, 11:03
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,031

function* func(string) {
	var prev = " ";
	for(const char of string)
		yield prev = prev === " " ? char.toUpperCase() : char;
}

alert([...func("вася петя маша таня")].join(""));

Последний раз редактировалось Malleys, 21.03.2019 в 11:14.
Ответить с цитированием
  #7 (permalink)  
Старый 21.03.2019, 11:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,334


var str = "Вася петя маша таня";
var strNew = "";
var up = true;
for(var i = 0; i < str.length;i++) {
         strNew += up ? str[i].toUpperCase() : str[i];
         up = str[i] == " ";
}
alert(strNew);
Ответить с цитированием
  #8 (permalink)  
Старый 21.03.2019, 11:58
Новичок на форуме
Отправить личное сообщение для fluorke Посмотреть профиль Найти все сообщения от fluorke
 
Регистрация: 21.03.2019
Сообщений: 3

Спасибо всем за решения. Меня хватило на такое:
var str = "вася петя маша таня";
n = str[0].toUpperCase()
x = 1

while (x < str.length){
  if (str[x] == ' '){
    n += str[x] + str[x+1].toUpperCase()
    x+=2
  } else {
    n += str[x]
    x++
  }
}
alert(n)
Ответить с цитированием
  #9 (permalink)  
Старый 21.03.2019, 13:19
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,887

рони,
Так то легко... А я использовал все разрешенные методы
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить размер всех элементов страницы пропорционально размеру окна nefton Events/DOM/Window 3 03.01.2014 08:22
необходимо написать функцию поиска всех слов в строке, не содержащих подстроку AlexKotov Общие вопросы Javascript 5 27.08.2013 14:59
Обрезать часть слов у всех <h3> при загрузке страницы swess Общие вопросы Javascript 9 14.01.2012 04:44
Как изменить свойство css у всех элементов одного класса AlexJ Events/DOM/Window 7 19.03.2011 05:25
Как изменить background всех дочерних элементов внутри <div>? libinstyle Общие вопросы Javascript 2 24.03.2010 12:25