ASCII (American Standard Code for Information Interchange) ialah format pengekodan aksara yang paling biasa untuk data teks pada komputer dan Internet. Dalam data berkod ASCII standard, 256 huruf, nombor atau aksara tambahan khas dan kod kawalan mempunyai nilai unik.
Sekarang, dalam masalah ini, kita perlu mencari rentetan yang diisih dalam tertib menaik berdasarkan nilai ASCII aksara, di mana rentetan itu akan menjadi input yang diberikan kepada kita oleh pengguna. Mari lihat bagaimana kita harus menyelesaikan masalah ini.
Mari kita cuba memahami masalah ini dengan bantuan beberapa contoh.
Input - s = "$%7wjk()"
Output - “$%()7jkw”
Penjelasan - Nilai ASCII bagi aksara rentetan yang diberikan adalah seperti berikut -
$ -> 36 % -> 37 ( -> 40 ) -> 41 7 -> 55 j -> 106 k -> 107 w -> 119
Oleh itu, dalam meningkatkan susunan nilai kod ASCII, rentetan akan menjadi "$%()7jkw"
Masuk - s = "#m 0f )nk"
Output - “#)0fkmn”
Penjelasan - Nilai ASCII bagi aksara rentetan yang diberikan adalah seperti berikut -
(space) -> 32 # -> 35 ) -> 41 0 -> 48 f -> 102 k -> 107 m -> 109 n -> 110
Oleh itu, dalam meningkatkan susunan nilai kod ASCII, rentetan akan menjadi "#)0fkmn"
Jom cuba fahami masalah dan cari jalan penyelesaian. Kita tahu bahawa terdapat 256 aksara dalam jadual ASCII, setiap satunya mempunyai nilai atau kedudukan yang unik. Jadi matlamat asas kami adalah untuk mengisih watak-watak yang sesuai. Kita boleh menggunakan fungsi pengisihan terbina dalam dengan menggunakan fungsi luaran yang boleh digunakan untuk mencapai matlamat kita. Pendekatan lain ialah mencipta vektor frekuensi dan menyimpan kekerapan setiap aksara dalam tatasusunan itu. Menggunakan vektor frekuensi ini dan nilai ASCII, kita boleh mendapatkan rentetan baharu.
Buat vektor frekuensi bersaiz 256 kerana jumlah bilangan aksara dalam jadual ASCII ialah 256 dan mulakan keseluruhan vektor dengan sifar
Jalankan gelung untuk menyimpan kekerapan setiap aksara rentetan yang diberikan
Sekarang tentukan rentetan keluaran yang pada mulanya kosong
Jalankan gelung lain untuk lelaran pada vektor frekuensi, supaya kita boleh mendapatkan rentetan output dengan menaip kedudukan ke-i Frequency_vector[i]
Kembalikan rentetan keluaran sebagai hasil akhir
Berikut ialah pelaksanaan program C++ bagi kaedah di atas:
#include <bits/stdc++.h> using namespace std; // Function to Sort the string as per ASCII values of the characters string Helper(string s){ // Define the size of the given string int size = s.length(); // Define a frequency vector of size 256, which is the same as the size of the characters as per the ASCII table, and initiate the value of the vector as 0 vector<int> v(256, 0); // Run a loop to count the frequency of each character of the string for (int i = 0; i < size; i++) { v[s[i]]++; } // Declare a string, initially empty, to find the final output string ans = ""; // Run another loop to get the final output in accordance with the ASCII table for (int i = 0; i < 256; i++) { for (int j = 0; j < v[i]; j++) // Typecast the integer value to the character value to include it in the loop ans = ans + (char)i; } // Return the final output return ans; } int main(){ // Give input as a string by the user string s = "$%7wjk()"; // Call Helper function to perform the remaining tasks cout<< "The sorted string as per ASCII values of the characters is: " << Helper(s); return 0; }
The sorted string as per ASCII values of the characters is: $%()7jkw
Kerumitan masa - O(n); dengan n ialah saiz rentetan. Di sini, kerumitan masa sebenar ialah O(n * 256), tetapi kita boleh menganggapnya sebagai O(n) kerana 256 boleh dianggap sebagai pemalar seperti k, manakala O(k * n) hanya dianggap sebagai O(n ) .
Kerumitan ruang - O(256); kerana satu-satunya ruang tambahan yang diambil di sini ialah ruang untuk tatasusunan frekuensi, yang mempunyai saiz 256.
Tentukan fungsi perbandingan luaran, digunakan dalam fungsi pengisihan untuk mengisih aksara mengikut nilai ASCIInya, iaitu mengembalikan aksara yang nilai penukaran jenis intnya lebih kecil daripada aksara lain.
李>Sekarang gunakan fungsi isihan terbina dalam dalam fungsi pembantu dan gunakan parameter tambahan (fungsi perbandingan) untuk mendapatkan pesanan dengan betul.
Panggil fungsi pembantu dan dapatkan output rentetan akhir.
#include "bits/stdc++.h" using namespace std; // Comparison Function to sort the string as per ASCII values of the characters bool comparison(char ch1, char ch2){ return int(ch1) <= int(ch2); } // Function to sort the string as per ASCII values of the characters string Helper(string s){ // Sort the string s with the help of the inbuilt function sort() sort(s.begin(), s.end(), comparison); // Return the final output string s return s; } int main(){ // Give input as a string by the user string s = "$%7wjk()"; // Call Helper function to perform the remaining tasks cout<< "The sorted string as per ASCII values of the characters is: " << Helper(s); return 0; }
The sorted string as per ASCII values of the characters is: $%()7jkw
Kerumitan masa: O(log(n)); seperti yang kita sedia maklum, fungsi pengisihan terbina dalam mengambil masa O(n * log(n)) untuk melaksanakan kod. Dalam kaedah ini kami menggunakan fungsi pengisihan terbina dalam dengan menggunakan fungsi perbandingan tambahan yang akan mengisih aksara berdasarkan fungsi tersebut.
Kerumitan ruang: O(1); Dalam kod di atas, kami tidak menyimpan sebarang pembolehubah dalam beberapa struktur data.
Dalam artikel ini, kami menemui rentetan yang diisih berdasarkan nilai ASCII bagi aksara dalam tertib menaik. Kita boleh menyelesaikan masalah ini dengan dua cara. Mula-mula, kita boleh membuat vektor frekuensi bersaiz 256 (bilangan aksara yang sama dalam jadual ASCII) dan menyimpan semua frekuensi bagi setiap aksara, dan kemudian lelaran dari belakang untuk mendapatkan rentetan yang dikehendaki. Cara lain ialah menggunakan fungsi isihan terbina dalam, dengan bantuan parameter tambahan yang diluluskan dalam fungsi isihan.
Atas ialah kandungan terperinci Isih rentetan mengikut nilai ASCII aksara. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!