строка, изменить регистр заглавных букв всех слов
Добрейшего денечка уважаемые. У нас есть строка аля "Вася петя маша таня", между слов пробелы, нужно сделать буквы имен заглавными, при помощи 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() - не получается. То есть алгоритм такой - я нашел все позиции пробелов, могу заменить буквы на заглавные, но создать всю строку - печаль, беда. |
Цитата:
Если второе, то я бы сделал так:
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('Вася петя маша таня')
);
|
Все первые буквы, всех слов - заглавными, массивами мы не пользуемся, просто цикл и строка. Спасибо.
|
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('вася петя маша таня')
);
|
при помощи 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);
|
function* func(string) {
var prev = " ";
for(const char of string)
yield prev = prev === " " ? char.toUpperCase() : char;
}
alert([...func("вася петя маша таня")].join(""));
|
:-?
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);
|
Спасибо всем за решения. Меня хватило на такое:
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)
|
рони,
Так то легко... А я использовал все разрешенные методы |
| Часовой пояс GMT +3, время: 22:38. |