Mündəricat
Verilən giriş sətirləri üçün ikinci sətirdə olan simvolları birinci sətirdən silin. (hal həssaslığı ilə)
misal
a) Sətir 1: kompüter
Giriş sətri2: pişik
Çıxış: səssizləşdirici
String2-dən (c, a, t) simvolları string1-dən çıxardıqdan sonra ompuer əldə edirik
b) Giriş sətri1: baş vermə
Giriş sətri2: avtomobil
Çıxış: ouene
String2-dən (c, a, r) simvolları string1-dən çıxardıqdan sonra ouene əldə edirik
Zamanın mürəkkəbliyi: O (m + n), m və n simlərin uzunluğudur
Alqoritm
a. İkinci sətirdən işarələrin sayını saxlayan ikinci sətirdən say massivi alın.
b. Giriş sətirində, sayı massivindən> 0 tezliyi olan simvollar varsa, yoxlayın, əgər keçin və qalan sətri giriş sətrinə kopyalayın.
c. Bu çıxdıqdan sonra əlavə simvolları silmək üçün \ 0 əlavə edin
(Sıfır xitam).
Qeyd: \ 0 Null ASCII dəyəri 0 deməkdir)
Alqoritm işləyir
C ++ Proqramı
#include <bits/stdc++.h> using namespace std; #define ASCII_SIZE 256 //Remove characters from string1 which are in string2 char *RemoveChars(char *string1, char *string2) { //Count array stores the count of chars from string2 int *count = (int *)calloc(sizeof(int), ASCII_SIZE); for(int i = 0; *(string2+i); i++) { count[*(string2+i)]++; } int i = 0, j = 0; while(*(string1 + i)) { char temp = *(string1 + i); //If count of charcter is zero add to output if(count[temp] == 0) { *(string1 + j) = *(string1 + i); j++; } i++; } //Null termination //removing extra characters *(string1+j) = '\0'; return string1; } //Main function to test above function int main() { //string1 char string1[] = "computer"; //string2 char string2[] = "programming"; cout<<"Input strings:\n"; cout<<"string1: "; for (int i = 0; i < strlen(string1); ++i) { cout<<string1[i]; } cout<<"\nstring2: "; for (int i = 0; i < strlen(string2); ++i) { cout<<string2[i]; } //print output string cout<<"\nOutput: "; cout<<RemoveChars(string1, string2); return 0; }
Yoxla