বর্ণ বৃদ্ধি করার ক্ষেত্রে কী কী পদ্ধতি ব্যবহার করা যেতে পারে?


104

জাভাস্ক্রিপ্ট লাইব্রেরি (যেমন আন্ডারস্কোর, jQuery, MooTools, ইত্যাদি) যে কেউ চিঠি বাড়ানোর পদ্ধতি প্রস্তাব করে সে সম্পর্কে কেউ কি জানেন?

আমি কিছু করতে সক্ষম হতে চাই:

"a"++; // would return "b"

আপনি যে সিনট্যাক্সটি সন্ধান করছেন তা নিশ্চিত কিনা তা আমি নিশ্চিত নই , তবে পদ্ধতিগুলির মাধ্যমে অপারেশন সম্ভব।
Anson

আবেদন কি?
ভ্যালেন্টিনাস

উত্তর:


184

সহজ, সরাসরি সমাধান

function nextChar(c) {
    return String.fromCharCode(c.charCodeAt(0) + 1);
}
nextChar('a');

অন্যরা যেমন উল্লেখ করেছে, ব্যর্থতা হ'ল প্রত্যাশার সাথে 'z' অক্ষরের মতো মামলাগুলি পরিচালনা করতে পারে না। তবে এটি নির্ভর করে যে আপনি এটি থেকে কী চান। উপরের সমাধানটি 'z' এর পরে চরিত্রটির জন্য '{' ফিরিয়ে দেবে এবং এটি ASCII এ 'z' এর পরের অক্ষর, সুতরাং এটি আপনার ব্যবহারের ক্ষেত্রে কী রয়েছে তার উপর নির্ভর করে আপনি যে ফলাফলটি সন্ধান করছেন তা হতে পারে।


অনন্য স্ট্রিং জেনারেটর

(আপডেট হয়েছে 2019/05/09)

যেহেতু এই উত্তরটি এত বেশি দৃশ্যমানতা পেয়েছে আমি গুগল থেকে এই লোকজনকে যেভাবে হোঁচট খাচ্ছে তাদের সম্ভাব্যরূপে সহায়তার জন্য এটি মূল প্রশ্নের ক্ষেত্রের বাইরে কিছুটা বাড়ানোর সিদ্ধান্ত নিয়েছি।

আমি দেখতে পাই যে আমি প্রায়শই যা চাই তা এমন কিছু যা নির্দিষ্ট চরিত্রের সেটগুলিতে অনুক্রমিক, অনন্য স্ট্রিং তৈরি করে (যেমন কেবলমাত্র অক্ষর ব্যবহার করে), তাই আমি এখানে এই ক্লাসটি অন্তর্ভুক্ত করার জন্য এই উত্তরটি আপডেট করেছি:

class StringIdGenerator {
  constructor(chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') {
    this._chars = chars;
    this._nextId = [0];
  }

  next() {
    const r = [];
    for (const char of this._nextId) {
      r.unshift(this._chars[char]);
    }
    this._increment();
    return r.join('');
  }

  _increment() {
    for (let i = 0; i < this._nextId.length; i++) {
      const val = ++this._nextId[i];
      if (val >= this._chars.length) {
        this._nextId[i] = 0;
      } else {
        return;
      }
    }
    this._nextId.push(0);
  }

  *[Symbol.iterator]() {
    while (true) {
      yield this.next();
    }
  }
}

ব্যবহার:

const ids = new StringIdGenerator();

ids.next(); // 'a'
ids.next(); // 'b'
ids.next(); // 'c'

// ...
ids.next(); // 'z'
ids.next(); // 'A'
ids.next(); // 'B'

// ...
ids.next(); // 'Z'
ids.next(); // 'aa'
ids.next(); // 'ab'
ids.next(); // 'ac'

সহজ সমাধান, তবে 'z' বা 'Z' এর উপস্থিতিটি পরিচালনা করে না।
ট্রেন্ট

4
এটি এমন এক গুঞ্জন কিল যা এটি বিশেষ চরিত্রে যাবে
ড্যানিয়েল থম্পসন

আমি পুরানো-স্কুল আইবিএম কোড পৃষ্ঠা 437 ফন্টে অ-প্রদর্শনকারী ইউনিকোড অক্ষরগুলি বেছে নেওয়ার চেষ্টা করছিলাম এবং ঠিক কী খুঁজছিলাম। আপনি আক্ষরিক অর্থে আমার অক্ষর টাইপিংয়ের কয়েক ঘন্টা সংরক্ষণ করেছেন।
বাম -আনমুন

4
ড্যানিয়েল থম্পসন এই সমাধানটি যথেষ্ট পরিমাণ তথ্যের চেয়ে বেশি সরবরাহ করে, আপনি নিজেই কোণার কেসগুলি পরিচালনা করতে পারেন। সর্বোপরি, এটি একটি "সহায়তা-একে অপরের" ওয়েবসাইট, বিনামূল্যে ওয়েবসাইটের জন্য আমার কাজটি করবেন না।
বোজিদার স্টানচেভ

শুরুর চরিত্রটিকে কীভাবে আর্গুমেন্ট হিসাবে পরিণত করা যায় তা নির্ধারণ করার জন্য আমাকে কিছুক্ষণ সময় নিয়েছিল। আমি ._nextId = [chars.split ('') ব্যবহার করে শেষ করেছি find ফাইন্ড ইন্ডেক্স (x => x == শুরু)]; বা আপনি যে পাস করেছেন তার চেয়ে আরও 1 টি শুরু করতে চান তবে +1 শুরু করুন
জনডাভিড

50

সরল জাভাস্ক্রিপ্টের কৌশলটি করা উচিত:

String.fromCharCode('A'.charCodeAt() + 1) // Returns B

4
খাঁটি কবজ, সাদা স্থান এবং বিশেষ অক্ষরগুলি এড়ানোর বিষয়ে কোনও পরামর্শ কোডারবাইটে এটির একটি প্রশ্ন রয়েছে
স্যাজ 28

22

প্রদত্ত চিঠিটি z হলে কী হবে? এখানে একটি আরও ভাল সমাধান। এটি এ, বি, সি ... এক্স, ওয়াই, জেড, এএ, এ বি, ইত্যাদি ... মূলত এটি এক্সেল স্প্রেডশিটের কলাম আইডির মতো অক্ষরগুলিকে বৃদ্ধি করে।

NextChar ('yz'); // "জেডএ" প্রদান করে

    function nextChar(c) {
        var u = c.toUpperCase();
        if (same(u,'Z')){
            var txt = '';
            var i = u.length;
            while (i--) {
                txt += 'A';
            }
            return (txt+'A');
        } else {
            var p = "";
            var q = "";
            if(u.length > 1){
                p = u.substring(0, u.length - 1);
                q = String.fromCharCode(p.slice(-1).charCodeAt(0));
            }
            var l = u.slice(-1).charCodeAt(0);
            var z = nextLetter(l);
            if(z==='A'){
                return p.slice(0,-1) + nextLetter(q.slice(-1).charCodeAt(0)) + z;
            } else {
                return p + z;
            }
        }
    }
    
    function nextLetter(l){
        if(l<90){
            return String.fromCharCode(l + 1);
        }
        else{
            return 'A';
        }
    }
    
    function same(str,char){
        var i = str.length;
        while (i--) {
            if (str[i]!==char){
                return false;
            }
        }
        return true;
    }

// below is simply for the html sample interface and is unrelated to the javascript solution

var btn = document.getElementById('btn');
var entry = document.getElementById('entry');
var node = document.createElement("div");
node.id = "node";

btn.addEventListener("click", function(){
  node.innerHTML = '';
  var textnode = document.createTextNode(nextChar(entry.value));
  node.appendChild(textnode);
  document.body.appendChild(node);
});
<input id="entry" type="text"></input>
<button id="btn">enter</button>


4
পরিবর্তিত if (same(u,'Z')){হয়েছে if (u == 'Z'){এবং এটি পুরোপুরি কাজ করে, ধন্যবাদ!
শান ক্যান্ডেল

খুশির কাজ হয়েছে এবং প্রতিক্রিয়ার জন্য ধন্যবাদ। সম্ভবত বিসিএসের প্রাথমিক ত্রুটিটি সেখানে শিরোনাম ফাংশনটি same(str,char)সেখানে আটকানো হয়নি? আমি জানিনা.
রনি রয়স্টন

কেস হতে হবে, same()পরিষ্কারভাবে একটি কাস্টম ফাংশন। ওহ ভাল, ==কাজ করে, এবং যদি আমি সুপারটি নিশ্চিত হতে চাইতাম ===তবে আমি ব্যবহার করতে পারি , তবে আমি এটি পরীক্ষা করেছি এবং এটি ঠিক আছে। আবার ধন্যবাদ!
শান ক্যান্ডেল

আপনি যদি zz টাইপ করেন তবে ট্রিপল এ পাবেন এটি কোডে কি বাগ?
আমর আশরাফ

4
আমি তাই মনে করি না? zz পরে কি আসে? আ আ? আমি এই মেশিনে এক্সেল ইনস্টল করি নি (ডাবল চেক করতে) তবে এটি আমার কাছে ঠিক মনে হচ্ছে।
রনি রয়স্টন

6

একটি সম্ভাব্য উপায় নীচে সংজ্ঞায়িত করা যেতে পারে

function incrementString(value) {
  let carry = 1;
  let res = '';

  for (let i = value.length - 1; i >= 0; i--) {
    let char = value.toUpperCase().charCodeAt(i);

    char += carry;

    if (char > 90) {
      char = 65;
      carry = 1;
    } else {
      carry = 0;
    }

    res = String.fromCharCode(char) + res;

    if (!carry) {
      res = value.substring(0, i) + res;
      break;
    }
  }

  if (carry) {
    res = 'A' + res;
  }

  return res;
}

console.info(incrementString('AAA')); // will print AAB
console.info(incrementString('AZA')); // will print AZB
console.info(incrementString('AZ')); // will print BA
console.info(incrementString('AZZ')); // will print BAA
console.info(incrementString('ABZZ')); // will print ACAA
console.info(incrementString('BA')); // will print BB
console.info(incrementString('BAB')); // will print BAC

// ... and so on ...


4

আপনি এটি চেষ্টা করতে পারেন

console.log( 'a'.charCodeAt​(0))​

প্রথমে এটি Ascii সংখ্যায় রূপান্তর করুন .. এটি বৃদ্ধি করুন .. তারপরে Ascii থেকে চর রূপান্তর করুন ..

var nex = 'a'.charCodeAt(0);
console.log(nex)
$('#btn1').on('click', function() {
   var curr = String.fromCharCode(nex++)
   console.log(curr)
});

বেআইনী পরীক্ষা করুন


4
হুঁ। আরও jQuery প্রয়োজন।
জ্যাস্পার

4

আমাকে একাধিকবার চিঠির সিক্যুয়েন্সগুলি ব্যবহার করা দরকার ছিল এবং তাই আমি এই এসও প্রশ্নের ভিত্তিতে এই ফাংশনটি তৈরি করেছিলাম। আমি আশা করি এটি অন্যকে সহায়তা করতে পারে।

function charLoop(from, to, callback)
{
    var i = from.charCodeAt(0);
    var to = to.charCodeAt(0);
    for(;i<=to;i++) callback(String.fromCharCode(i));
}
  • থেকে - চিঠি শুরু
  • থেকে - শেষ চিঠি
  • কলব্যাক (চিঠি) - ক্রম প্রতিটি অক্ষরের জন্য সঞ্চালনের ফাংশন

এটি কিভাবে ব্যবহার করতে:

charLoop("A", "K", function(char) {
    //char is one letter of the sequence
});

এই কাজের ডেমো দেখুন


3

এই সমস্ত উত্তর যোগ করা:

// first code on page
String.prototype.nextChar = function(i) {
    var n = i | 1;
    return String.fromCharCode(this.charCodeAt(0) + n);
}

String.prototype.prevChar = function(i) {
    var n = i | 1;
    return String.fromCharCode(this.charCodeAt(0) - n);
}

উদাহরণ: http://jsfiddle.net/pitaj/3F5Qt/


2

এই এক ভাল কাজ করে:

var nextLetter = letter => {
    let charCode = letter.charCodeAt(0);
    let isCapital = letter == letter.toUpperCase();

    if (isCapital == true) {
        return String.fromCharCode((charCode - 64) % 26 + 65)
    } else {
        return String.fromCharCode((charCode - 96) % 26 + 97)
    }
}

EXAMPLES

nextLetter("a"); // returns 'b'
nextLetter("z"); // returns 'a'
nextLetter("A"); // returns 'B'
nextLetter("Z"); // returns 'A'

1

হাসির সমাধানের জন্য একটি মাত্র

function nextLetter(str) {
  const Alphabet = [
    // lower case alphabet
    "a", "b", "c",
    "d", "e", "f",
    "g", "h", "i",
    "j", "k", "l",
    "m", "n", "o",
    "p", "q", "r",
    "s", "t", "u",
    "v", "w", "x",
    "y", "z",
    // upper case alphabet
    "A", "B", "C",
    "D", "E", "F",
    "G", "H", "I",
    "J", "K", "L",
    "M", "N", "O",
    "P", "Q", "R",
    "S", "T", "U",
    "V", "W", "X",
    "Y", "Z"
  ];

  const LetterArray = str.split("").map(letter => {
    if (Alphabet.includes(letter) === true) {
      return Alphabet[Alphabet.indexOf(letter) + 1];
    } else {
      return " ";
    }
  });

  const Assemble = () => LetterArray.join("").trim();
  return Assemble();
}


console.log(nextLetter("hello*3"));


0

এটা সত্যিই পুরানো। তবে আমার এই কার্যকারিতাটি প্রয়োজন এবং সমাধানগুলির কোনওটিই আমার ব্যবহারের ক্ষেত্রে অনুকূল নয়। আমি একটি, বি, সি ... জেড, আ, আব ... জেডজেড, আ ... তৈরি করতে চেয়েছিলাম এই সাধারণ পুনরাবৃত্তি কাজ করে।

function nextChar(str) {
if (str.length == 0) {
    return 'a';
}
var charA = str.split('');
if (charA[charA.length - 1] === 'z') {
    return nextID(str.substring(0, charA.length - 1)) + 'a';
} else {
    return str.substring(0, charA.length - 1) +
        String.fromCharCode(charA[charA.length - 1].charCodeAt(0) + 1);
}
};

0

বন্ধ করার সময় {a: 'b', b: 'c' ইত্যাদি দিয়ে একটি ফাংশন তৈরি করুন: -

let nextChar = (s => (
    "abcdefghijklmopqrstuvwxyza".split('')
    .reduce((a,b)=> (s[a]=b, b)), // make the lookup
c=> s[c] // the function returned
))({}); // parameter s, starts empty

ব্যবহার:

nextChar('a')

বড় হাতের অক্ষর এবং অঙ্কগুলি যুক্ত করা হচ্ছে: -

let nextCh = (
    (alphabeta, s) => (
        [alphabeta, alphabeta.toUpperCase(), "01234567890"]
            .forEach(chars => chars.split('')
               .reduce((a,b) => (s[a]=b, b))), 
        c=> s[c] 
    )
)("abcdefghijklmopqrstuvwxyza", {});

PS জাভাস্ক্রিপ্টের কিছু সংস্করণে, আপনি এর [...chars]পরিবর্তে ব্যবহার করতে পারেনchars.split('')



0

এখানে ROT13 অ্যালগরিদম আমি জমা একটি প্রকরণ হয় https://stackoverflow.com/a/28490254/881441 :

function rot1(s) {
  return s.replace(/[A-Z]/gi, c =>
    "BCDEFGHIJKLMNOPQRSTUVWXYZAbcdefghijklmnopqrstuvwxyza"[
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".indexOf(c) ] )
}

নীচে ইনপুট কোড এবং সন্ধান আপ কোডেক শীর্ষে রয়েছে (অর্থাত্ আউটপুট কোডটি ইনপুট কোডের সমান তবে 1 দ্বারা স্থানান্তরিত)। ফাংশনটি কেবল অক্ষর পরিবর্তন করে, অর্থাত্ যদি অন্য কোনও চরিত্রটি প্রবেশ করে, তবে এই কোডেকটি এটি অপরিবর্তিত থাকবে।


0

function charLoop(from, to, callback) {
    var i = from.charCodeAt(0);
    var to = to.charCodeAt(0);
    for (; i <= to; i++) {
        callback(String.fromCharCode(i));
    }
}

var sequence = "";
charLoop("A", "Z", function (char) {
    sequence += char + " ";
});

sequence = sequence.trim();
sequence = sequence.split(" ");

var resseq = sequence;
var res = "";
var prevlet = "";
var nextlet = "";

for (b = 0; b < resseq.length; b++) {
    if (prevlet != "") {
        prevlet = resseq[b];
    }

    for (a = 0; a < sequence.length; a++) {
        for (j = 1; j < 100; j++) {
            if (prevlet == "") {
                prevlet = sequence[a];
                nextlet = sequence[a + 1];
                res += sequence[a] + sequence[a] + 0 + j + " ";
            }
            else {

                if (j < 10) {
                    res += prevlet + sequence[a] + 0 + j + " ";
                }
                else {
                    res += prevlet + sequence[a] + j + " ";
                }
            }
        }
    }
}

document.body.innerHTML = res;


4
আপনি এখানে ঠিক কী করেছেন এবং এটি কেবল কোডের একটি ব্লক না রেখে কীভাবে সহায়তা করে তা আপনি ব্যাখ্যা করতে পারেন, ধন্যবাদ! - কোডে কিছু সহায়ক সেমিমেন্ট?
মার্ক ডেভিস

String.fromCharCode () এটি চিঠির চর কোডটি প্রদান করে।
লোকেশকুমার

0

@ নাথন প্রাচীরের উত্তর বৃদ্ধি এবং হ্রাসের ভিত্তিতে

// Albhabet auto increment and decrement
class StringIdGenerator {
    constructor(chars = '') {
      this._chars = chars;
    }

  next() {
    var u = this._chars.toUpperCase();
    if (this._same(u,'Z')){
        var txt = '';
        var i = u.length;
        while (i--) {
            txt += 'A';
        }
        this._chars = txt+'A';
        return (txt+'A');
    } else {
      var p = "";
      var q = "";
      if(u.length > 1){
          p = u.substring(0, u.length - 1);
          q = String.fromCharCode(p.slice(-1).charCodeAt(0));
      }
      var l = u.slice(-1).charCodeAt(0);
      var z = this._nextLetter(l);
      if(z==='A'){
        this._chars = p.slice(0,-1) + this._nextLetter(q.slice(-1).charCodeAt(0)) + z;
          return p.slice(0,-1) + this._nextLetter(q.slice(-1).charCodeAt(0)) + z;
      } else {
        this._chars = p+z;
          return p + z;
      }
    }
  }

  prev() {
    var u = this._chars.toUpperCase();
    console.log("u "+u)
    var l = u.slice(-1).charCodeAt(0);
    var z = this._nextLetter(l);
    var rl = u.slice(1)
    var y = (rl == "A") ? "Z" :this._prevLetter(rl.charCodeAt(0))
      var txt = '';
      var i = u.length;
      var j = this._chars
      var change = false
      while (i--) {
        if(change){
          if (u[u.length-1] == "A"){
            txt += this._prevLetter(u[i].charCodeAt(0))
          }else{
            txt += u[i]
          }
          
        }else{
          if (u[u.length-1] == "A"){
            txt += this._prevLetter(u[i].charCodeAt(0))
            change = true
          }else{
            change = true
            txt += this._prevLetter(u[i].charCodeAt(0))
          }
        }
      }
      if(u == "A" && txt == "Z"){
        this._chars = ''
      }else{
        this._chars = this._reverseString(txt);
      }
      console.log(this._chars)
      return (j);
  }
  _reverseString(str) {
      return str.split("").reverse().join("");
  }
  _nextLetter(l){
      if(l<90){
          return String.fromCharCode(l + 1);
      }
      else{
          return 'A';
      }
  }

  _prevLetter(l){
    if(l<=90){
      if(l == 65) l = 91
        return String.fromCharCode(l-1);
    }
    else{
        return 'A';
    }
  }
  _same(str,char){
      var i = str.length;
      while (i--) {
          if (str[i]!==char){
              return false;
          }
      }
      return true;
  }
    
}

ব্যবহার

const ids = new StringIdGenerator();

ids.next(); 
ids.prev();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.