Инкрементированая строка

129
01 марта 2021, 12:00

Есть ли у кого-нибудь код, который получает из строки допустим 'qwerty' следующую 'qwertz', а из строки 'qwertz' - 'qwerva'. Инкрементированую строку, если это можно назвать так.

Answer 1

Могу предложить простой алгоритм, который делает то же самое, но в алфавите 0-9a-z.
Мы просто представляем слово, как число в 36ричной системе счисления:

function next(word, increment = 1) { 
  return (parseInt(word, 36)+increment).toString(36); 
} 
 
// Всё, что ниже, только для демонстрации, ответом является функция next 
 
const input = document.querySelector('input'); 
const prevBtn = document.getElementById('prevBtn'); 
const nextBtn = document.getElementById('nextBtn'); 
 
const startBtn = document.getElementById('startBtn'); 
const stopBtn = document.getElementById('stopBtn'); 
 
 
prevBtn.addEventListener('click', () => input.value = next(input.value, -1)); 
nextBtn.addEventListener('click', () => input.value = next(input.value)); 
 
{ 
  let h; 
  startBtn.addEventListener('click', () => { 
    h&&clearInterval(h); 
    h = setInterval(() => input.value = next(input.value), 120); 
  }); 
  stopBtn.addEventListener('click', () => h&&clearInterval(h)); 
}
<button id=prevBtn>&lt;&lt;</button> 
<input value="qwertx"> 
<button id=nextBtn>&gt;&gt;</button> 
<br> 
<button id=startBtn>Start</button> 
<button id=stopBtn>Stop</button>

С другим алфавитом(включая, например русские буквы или исключая цифры), придётся то же самое делать вручную.

Answer 2

function inc(s) { 
  return s.replace(/(^|.)(z*)$/, (m, c, t) => String.fromCharCode(c.charCodeAt(0) + 1 || "a".charCodeAt(0)) + "a".repeat(t.length)) 
} 
 
for (var s of ["", "q", "z", "aa", "az", "zz", "ffff", "dzzzz", "zzzzzz", "qwzzerzzty"]) { 
  console.log(s + "\n" + inc(s)) 
}
.as-console-wrapper.as-console-wrapper { max-height: 100vh }

Answer 3

Сделал для русского, не идеально т.к. буква ё "в пролёте" и цифры я не обрабатывал

console.log("привет -> ", next("привет", "ая")) 
console.log("ПЕТЯ -> ", next("ПЕТЯ", "ая")) 
 
function next(w, c) { 
  w = w.split(''); 
 
  for (let i = w.length - 1; i > -1; i--) { 
    if (w[i] === c[1]) { 
      w[i] = c[0] 
    } else if (w[i] === c[1].toUpperCase()) { 
      w[i] = c[0].toUpperCase() 
    } else { 
      w[i] = String.fromCharCode(w[i].charCodeAt(0) + 1); 
      break; 
    } 
  } 
  return w.join(''); 
}

Answer 4

Если представить строку как число в 26 (без цифр) ричной системе счисления то всё что нужно это воспользоваться алгоритмом суммирования таких чисел (прибавление 1 в нашем случае).

Допустим есть строка qwerty - в 26 ричной системе это 16 22 4 17 19 24

Эти цифры получились отнимаением от каждого символа числа 97 (код символа a что в 26 ричной системе получается 0, а последний символ это z это 25, отсюда и получаем 26 ричную систему)

Решение на С++ (ссори но переводить в js думаю не составит труда)

#include <iostream>
#include <string>
#define BASE 26
void incStr(std::string& s) {
    size_t size = s.size();
    int sum = 0;
    int carry = 0;
    sum = s[size-1] - 97 + 1;
    carry = sum / BASE;
    sum -= carry*BASE;
    s[size-1] = sum + 97;        
    if (carry == 0) return; // прибавление к нулям вовсе необязательно поэтому можно здесь остановится и с экономить на этих лишних итерациях
    for (int i = size-2; i > -1; --i) {
        sum = s[i] -97 + carry;
        carry = sum/BASE;
        sum -= carry*BASE;
        s[i] = sum + 97;
    }    
}
int main()
{
    std::string s = "qwerty";
    for (int i = 0; i < 52; ++i) {
        std::cout << s << '\n';
        incStr(s);
    }
    return 0;
}

p.s. Этот ответ это скорее как детальное пояснение ответа от @vp_arth, которое поможет разобраться глубже

READ ALSO
Циклы в BeautifulSoup4 Python

Циклы в BeautifulSoup4 Python

Я запарсил сайт

102
Замена текста в файле .txt с помощью cmd

Замена текста в файле .txt с помощью cmd

В текстовом файле находится размеченный тегами текстНо эти теги разорваны, например:

115
Изменение атрибута src изображения при изменении свойства location.hash

Изменение атрибута src изображения при изменении свойства location.hash

Есть код <img src="">, вместо изображения нужно как-то вставить код JS:

72