3"/> 3">

Rumah >pembangunan bahagian belakang >C++ >Isih rentetan mengikut nilai ASCII aksara

Isih rentetan mengikut nilai ASCII aksara

王林
王林ke hadapan
2023-09-07 20:29:081762semak imbas

Isih rentetan mengikut nilai ASCII aksara

Nilai ASCII

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.

Pernyataan Masalah

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"

Penjelasan masalah

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.

Penyelesaian 1 Gunakan vektor frekuensi

Algoritma

  • 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

Contoh

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;
}

Output

The sorted string as per ASCII values of the characters is: $%()7jkw

Kerumitan kod di atas

  • 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.

Penyelesaian 2 Penyelesaian menggunakan fungsi pengisihan terbina dalam

Algoritma

  • 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.

Contoh

#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;
}

Output

The sorted string as per ASCII values of the characters is: $%()7jkw

Kerumitan kod di atas

  • 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.

Kesimpulan

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam