পূর্ণসংখ্যাকে তার অক্ষরের সমতুল্যে রূপান্তর করুন, যেখানে 0 => এ, 1 => খ ইত্যাদি


173

আমি বর্ণমালার উপর ভিত্তি করে একটি পূর্ণসংখ্যাকে এর চরিত্রের সমতুল্যে রূপান্তর করতে চাই। উদাহরণ স্বরূপ:

0 => a
1 => b
2 => c
3 => d

ইত্যাদি। আমি যখন একটি অ্যারে তৈরি করতে পারি এবং যখন এটি প্রয়োজন হয় ঠিক তখনই এটি সন্ধান করতে পারি তবে আমি ভাবছি যে এটি করার জন্য কোনও কার্যনির্বাহী আছে কিনা। গুগলের মাধ্যমে আমি যে সমস্ত উদাহরণ পেয়েছি সেগুলি ASCII মানগুলির সাথে কাজ করছে এবং বর্ণমালায় কোনও চরিত্রের অবস্থান নয়।


2
ছোট হাতের অক্ষরগুলি ASCII এ বর্ণানুক্রমিকভাবে অর্ডার করা হয়।
আনন

13
এমনকি অঙ্কগুলি ;-)
এমবিকিউ

উত্তর:


324

ধরে নিচ্ছি আপনি ছোট হাতের অক্ষর চান:

var chr = String.fromCharCode(97 + n); // where n is 0, 1, 2 ...

97 হ'ল ছোট কেস 'এ' এর ASCII কোড। আপনি যদি বড় হাতের অক্ষর চান তবে replace৯ টি 65 (বড় হাতের 'এ') দিয়ে প্রতিস্থাপন করুন। মনে রাখবেন যে, যদি n > 25আপনি অক্ষরের পরিসীমা থেকে বেরিয়ে আসেন।


82

অন্যান্য বর্ণমালা পর্যন্ত প্রসারিত করার ক্ষেত্রে আরও বহনযোগ্য হবে:

char='abcdefghijklmnopqrstuvwxyz'[code]

বা, আরও সামঞ্জস্যপূর্ণ হতে (আমাদের প্রিয় আই এর সাথে):

char='abcdefghijklmnopqrstuvwxyz'.charAt(code);

5
String.fromCharCodeআমার মতামতের চেয়ে অনেক বেশি মার্জিত , যেমনটি আপনি বলেছেন, এটি খুব সহজেই প্রসারিত।
সাশা চেদিগোভ

8
এবং যখন আপনার প্রসারিত করার প্রয়োজন নেই, তখন আরও ত্রুটি হওয়ার আশঙ্কা রয়েছে? abcede
নেলসন

5
FYI JScript (IE) []স্ট্রিংগুলিতে সূচক অপারেটরটিকে সমর্থন করে না ।
ক্রিসেন্ট তাজা

4
@ ক্রিসেন্ট, []স্ট্রিংগুলিতে সম্পত্তি অ্যাক্সেসর আইই 8 আপ থেকে আইই সমর্থন করে (আইই 7 কমপ্যাট মোডে আইই 8ও কাজ করে না), ব্রাউজারের সামঞ্জস্যের String.prototype.chatAtপরিবর্তে অগ্রাধিকার দেওয়া হয় []। যেমন'foo'.charAt(0) == 'f'
সিএমএস

2
@ ক্রিসেন্ট, উল্লেখ করতে ভুলে গেছেন যে []স্ট্রিংগুলিতে সম্পত্তি অ্যাক্সেসরটি ECMAScript 5 তে মানিক করা হয়েছে (দেখুন [[getOwnProperty]] (পি) )।
সিএমএস

29

আপনি যদি বহু-চরিত্রের স্ট্রিংগুলি ফিরে পেতে আপত্তি না করেন তবে আপনি নির্বিচারে ইতিবাচক সূচকগুলি সমর্থন করতে পারেন:

function idOf(i) {
    return (i >= 26 ? idOf((i / 26 >> 0) - 1) : '') +  'abcdefghijklmnopqrstuvwxyz'[i % 26 >> 0];
}

idOf(0) // a
idOf(1) // b
idOf(25) // z
idOf(26) // aa
idOf(27) // ab
idOf(701) // zz
idOf(702) // aaa
idOf(703) // aab

(নির্ভুল ত্রুটির জন্য পুঙ্খানুপুঙ্খভাবে পরীক্ষা করা হয়নি :)


1
রিকার্সিভ ফাংশন, খুব সুন্দর!
জন ভার্জোলিনো

@ মাইকমেচানা, কেন এই সম্পাদনা? আমি মনে করি এটি পড়া শক্ত করে তোলে। কোডটি পড়তে এখন আমাকে অনুভূমিকভাবে স্ক্রোল করতে হবে।
z0r

@ z0r সুতরাং কোড ব্যবহার করা লোকদের নতুন লাইনটি ঠিক করতে হবে না। নির্বিচারে লাইনগুলি ভাঙার কোনও কারণ নেই, সম্পাদকরা তাদের উইন্ডোর চরিত্রের আকারে মোড়াবেন।
মাইকমেকানা

এটি দুর্দান্ত কাজ করে, বিপরীতে কি কোনও রূপ রয়েছে?
ইথান

দুর্দান্ত ধারণা, তবে এটির পরিবর্তিত হওয়া অবধি এটি কার্যকর হয়নি:function idOf(i) { return (i >= 26 ? idOf(Math.floor(i / 26) -1 ) : '') + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[i % 26]; }
প্যাট্রিকভিএল

19

একটি সহজ উত্তর হবে (26 অক্ষর):

String.fromCharCode(97+n);

স্থানটি মূল্যবান হলে আপনি নিম্নলিখিত (20 টি অক্ষর) করতে পারেন:

(10+n).toString(36);

এই সমস্ত অতিরিক্ত বাইটগুলির সাথে আপনি কী করতে পারেন তা ভেবে দেখুন!

এটি কীভাবে কাজ করে আপনি সংখ্যাটি বেস ৩ 36 এ রূপান্তর করেন, সুতরাং আপনার নিম্নলিখিত অক্ষর রয়েছে:

0123456789abcdefghijklmnopqrstuvwxyz
^         ^
n        n+10

10 দ্বারা অফসেট করে অক্ষরের aপরিবর্তে শুরু হয় 0

ক্লায়েন্ট-সাইডের তুলনায় দুটি ভিন্ন উদাহরণের তুলনায় কত দ্রুত সঞ্চালন করা হবে তা সম্পর্কে পুরোপুরি নিশ্চিত নন।


2
আমি আপনার বেস 36 সৃজনশীলতা উপভোগ করেছি
জোশ

6

জাভাস্ক্রিপ্টের স্ট্রিং.ফ্রোমচোড (কোড 1, কোড 2, ..., কোডএন) অসীম সংখ্যক আর্গুমেন্ট গ্রহণ করে এবং চিঠিগুলির একটি স্ট্রিং প্রদান করে যার সম্পর্কিত ASCII মানগুলি কোড 1, কোড 2, ... কোডএন। যেহেতু 97 ASCII এ 'ক', তাই আমরা আপনার সূচকে 97 যুক্ত করে আপনার সূচির জন্য সামঞ্জস্য করতে পারি।

function indexToChar(i) {
  return String.fromCharCode(i+97); //97 in ASCII is 'a', so i=0 returns 'a', 
                                    // i=1 returns 'b', etc
}

4
ভাল, পেডেন্টিক হতে, এটি একটি অসীম সংখ্যা নয়, আর্গুমেন্টগুলির একটি পরিবর্তনশীল সংখ্যার প্রয়োজন।
wchargin

4

আমি সব সমাধান যে মত যাদু সংখ্যা ব্যবহার পছন্দ করেন না 97বা 36

const A = 'A'.charCodeAt(0);

let numberToCharacter = number => String.fromCharCode(A + number);

let characterToNumber = character => character.charCodeAt(0) - A;

এটি বড় হাতের অক্ষর ধরে এবং 0 এ 'এ' শুরু করে।


3

ব্যবহার String.fromCharCode। এটি ইউনিকোড মান থেকে একটি স্ট্রিং প্রদান করে যা ASCII এর প্রথম 128 টি অক্ষরের সাথে মেলে।

var a = String.fromCharCode(97);

3

আপনি সেখানে যান: (a-zA-Z)

function codeToChar( number ) {
  if ( number >= 0 && number <= 25 ) // a-z
    number = number + 97;
  else if ( number >= 26 && number <= 51 ) // A-Z
    number = number + (65-26);
  else
    return false; // range error
  return String.fromCharCode( number );
}

ইনপুট: 0-51, বা এটি মিথ্যা (পরিসীমা ত্রুটি) ফিরে আসবে;

বা:

var codeToChar = function() {
  var abc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
  return function( code ) {
    return abc[code];
  };
})();

ব্যাপ্তি ত্রুটির ক্ষেত্রে অপরিজ্ঞাত ফিরিয়ে দেয়। দ্রষ্টব্য: অ্যারেটি একবারে তৈরি করা হবে এবং বন্ধ হওয়ার কারণে এটি নতুন কোডটোচার ফাংশনের জন্য উপলব্ধ হবে। আমি অনুমান করি যে এটি প্রথম পদ্ধতির পরে আরও দ্রুত (এটি মূলত কেবল একটি চেহারা)।


এটি ASCII এর সাথে কাজ করে, আমার বর্ণমালায় চরিত্রের অবস্থান নিয়ে কাজ করা দরকার।
ভিভা এলএ এনডাব্লুও

@ ভিভা - আমার মনে হয় আপনি এই কাজ করতে পারতেন? @ গালাম্বালাজা - আমি মনে করি আপনি not৪ না not৫ চান
জেমস ওয়েস্টগেট

আমি ঠিক দেখিয়েছি যে এটি কতটা সহজ। তিনি এই কাজ করতে পারে। কিন্তু আপনি সেখানে যান। আপডেটটি দেখুন
gblazex

1

@ মাইকম্যাকানার দুর্দান্ত সমাধানটির একমাত্র সমস্যা হ'ল এটি বাইনারি >> অপারেটরটি ব্যবহার করে যা ব্যয়বহুল, কর্মক্ষমতা অনুযায়ী। আমি আপনার মহান কাজের এই সংশোধনটির সামান্য উন্নতি হিসাবে পরামর্শ দিচ্ছি যা আপনার সহকর্মীরা সম্ভবত আরও সহজেই পড়তে পারেন।

const getColumnName = (i) => {
     const previousLetters = (i >= 26 ? getColumnName(Math.floor(i / 26) -1 ) : '');
     const lastLetter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[i % 26]; 
     return previousLetters + lastLetter;
}

বা ওয়ান-লাইনার হিসাবে

const getColumnName = i => (i >= 26 ? getColumnName(Math.floor(i / 26) -1 ) : '') + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[i % 26];

উদাহরণ:

getColumnName(0); // "A"
getColumnName(1); // "B"
getColumnName(25); // "Z"
getColumnName(26); // "AA"
getColumnName(27); // "AB"
getColumnName(80085) // "DNLF"


-3

ধরে নিচ্ছি আপনি বড় হাতের অক্ষরের অক্ষর চান:

function numberToLetter(num){
        var alf={
            '0': 'A', '1': 'B', '2': 'C', '3': 'D', '4': 'E', '5': 'F', '6': 'G'
        };
        if(num.length== 1) return alf[num] || ' ';
        return num.split('').map(numberToLetter);
    }

উদাহরণ:

সংখ্যাটিলেটর ('023') হ'ল "" এ "," সি "," ডি "]

সংখ্যাটিলেটর ('5') হ'ল "এফ"

চিঠি ফাংশন সংখ্যা

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