Dalam soalan ini, kami diberikan rentetan e-mel yang mengandungi perkataan "titik" dan "di". Kita perlu menggantikannya dengan aksara "." dan "@".
Nota - Alamat e-mel yang sah hendaklah mengandungi hanya satu aksara '@'. Ia harus mengandungi aksara '@' sebelum sebarang awalan dan nama domain selepasnya. Selain itu, e-mel yang sah boleh mengandungi berbilang aksara '.'. Selain itu, aksara '@' dan '.' tidak seharusnya berada di permulaan atau penghujung alamat e-mel.
Pernyataan Masalah – Diberi rentetan str yang mengandungi alamat e-mel, panjang rentetan itu ialah N. Kita perlu memendekkan rentetan dengan menggantikan "at" dengan aksara "@" dan "titik" dengan aksara "."
Masukkan -str=”contactattutorialspointdotcom”
Output – contact@tutorialspoint.com
Nota - Kami menggantikan "at" dan titik masing-masing dengan "@" dan "."
Masukkan – str = “atatgmaildotcom”
Output – di@gmail.com
Nota– E-mel hanya boleh mengandungi satu "@" dan tidak boleh memilikinya pada permulaan, jadi output kelihatan seperti di atas
Dalam kaedah ini kami akan menyemak sama ada e-mel mengandungi subrentetan "at" atau "titik" bagi aksara semasa. Kita boleh menggantikannya dengan aksara "@" dan "."
Tentukan pembolehubah 'len' dan simpan panjang pembolehubah.
Tentukan pembolehubah 'minStr' dan mulakannya kepada aksara pertama rentetan asal
Tentukan pembolehubah 'I' dan mulakannya kepada 1 untuk digunakan dalam gelung. Juga, takrifkan pembolehubah 'isAtIncluded' dan mulakannya kepada palsu untuk menjejak sama ada aksara '@' dalam rentetan telah disertakan sekali.
Mula menggunakan gelung untuk mengulangi rentetan.
Jika i
Jika tidak, jika saya
Jika tidak tambahkan aksara semasa pada rentetan minStr
Kembalikan nilai rentetan terkecil.
#include <iostream> #include <iostream> using namespace std; // function to minimize the string by replacing at with @ and dot with '.' string minifyEmail(string original){ string minstr = ""; int len = original.length(); // append the first character to the final string minstr += original[0]; // start index int i = 1; // Check wether at(@) already included or not bool isAtIncluded = false; // travere the string for (int i = 0; i < len; i++){ // at can be replaced at most once if (i < len - 3 && !isAtIncluded && original.substr(i, 2) == "at"){ // add '@' to minstr minstr += '@'; // Update isAtIncluded isAtIncluded = true; i++; } // If current substring found dot else if (i < len - 4 && original.substr(i, 3) == "dot"){ // add '.' to minstr minstr += '.'; i += 2; } else { minstr += original[i]; } } return minstr; } int main(){ string original = "contactattutorialspointdotcom"; cout << "The string after minifying in the proper original format is " << minifyEmail(original); }
The string after minifying in the proper original format is ccontact@tutorialspoint.com
Kerumitan masa - O(N) kerana kami mengulangi rentetan.
Kerumitan ruang - O(N) kerana kami menyimpan rentetan mampat.
Dalam kod di atas, kami sentiasa menambahkan aksara pertama pada rentetan minstr. Oleh itu, ia tidak pernah menambah aksara "@" atau "." Selain itu, pengguna boleh menggunakan kaedah replace() untuk menggantikan "titik" dengan "." dan "at" dengan aksara "@", tetapi pengaturcara perlu memastikan bahawa ia hanya menambah satu aksara "@" pada rentetan.
Atas ialah kandungan terperinci Mengurangkan rentetan kepada alamat e-mel panjang minimum yang sah, dengan menggantikan subrentetan yang ditentukan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!