ΠΡΠΈΠΌΠ΅Ρ 4.16. ΠΠΎΠ΄ΡΡΠ΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²
#include <string>
#include <iostream>
template<typename T>
int countUnique(const std::basic_string<T>& s) {
using std::basic_string;
basic_string<T> chars;
for (typename basic_string<T>::const_iterator p = s.begin();
p != s.end(); ++p) {
if (chars.find(*p) == basic.string<T>::npos)
chars += *p;
}
return(chars.length());
}
int main() {
std: :string s = "Abracadabra'";
std::cout << countUnique(s) << '\n';
}
Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠΈΡΠΊΠ° ΠΎΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ. ΠΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°ΠΉΡΠΈ ΡΡΠΎ- Π»ΠΈΠ±ΠΎ Π² ΡΡΡΠΎΠΊΠ΅ ΡΠΈΠΏΠ° string, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ, ΡΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
4.10. ΠΠΎΠΈΡΠΊ n-Π³ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ
ΠΠΌΠ΅Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ source ΠΈ ΡΠ°Π±Π»ΠΎΠ½ pattern ΡΠΈΠΏΠ° string, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°ΠΉΡΠΈ n-Π΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ pattern Π² source.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΠ»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈΡΠΊΠΎΠΌΠΎΠΉ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ find. ΠΡΠΈΠΌΠ΅Ρ 4.17 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΠΎΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ nthSubstr.
ΠΡΠΈΠΌΠ΅Ρ 4.17. ΠΠΎΠΈΡΠΊ n-Π³ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ
#include <string>
#include <iostream>
using namespace std;
int nthSubstr(int n, const strings s,
const strings p) {
string::size_type i = s.find(p); // ΠΠ°ΠΉΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅
int j;
for (j = 1; j < n && i != string::npos; ++j)
i = s.find(p, i+1); // ΠΠ°ΠΉΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅
if (j == n) return(i);
else return(-1);
}
int main() (
string s = "the wind, the sea, the sky, the trees";
string p = "the";
cout << nthSubstr(1, s, p) << '\n';
cout << nthSubstr(2, s, p) << '\n';
cout << nthSubstr(5, s, p) << '\n';
}
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅Π ΡΡΠ½ΠΊΡΠΈΡ nthSubstr, ΠΈΠΌΠ΅ΡΡΡΡ Π²ΠΈΠ΄, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 4.17, ΠΌΠΎΠΆΠ½ΠΎ Π²Π½Π΅ΡΡΠΈ ΠΏΠ°ΡΡ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΉ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΉ, ΡΠ΄Π΅Π»Π°Π² ΠΈΠ· Π½Π΅Π΅ Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°Π±Π»ΠΎΠ½ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎ-Π²ΡΠΎΡΡΡ , ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ. ΠΠΎΠ΄ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΠΌΠΈΡΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠ°ΠΌΠΈ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ ΡΠ°ΠΊΠΈΠ΅, Ρ ΠΊΠΎΡΠΎΡΡΡ Π½Π°ΡΠ°Π»ΠΎ ΡΡΡΠΎΠΊΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ½ΡΠ° ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΡΡΡΠΎΠΊΠΈ, ΠΊΠ°ΠΊ Π² ΡΡΡΠΎΠΊΠ΅ Β«abracadabraΒ», Π³Π΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΡΠ°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ΅ΡΡΡΠ΅. ΠΡΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 4.18.
ΠΡΠΈΠΌΠ΅Ρ 4.18. Π£Π»ΡΡΡΠ΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ nthSubstr
#include <string>
#include <iostream>
using namespace std;
template<typename T>
int nthSubstrg(int n, const basic_string<T>& s,
const basic_string<T>& p, bool repeats = false) {
string::size_type i = s.find(p);
string::size_type adv = (repeats) ? 1 : p.length();
int j;
for (j = 1; j < n && i != basic_string<T>::npos; ++j)
i = s.find(p, i+adv);
if (j == n)
return(i);
else
return(-1);
}
int main() {
string s = AGATGCCATATATATACGATATCCTTA";
string p = "ATAT";
cout << p << " Π±Π΅Π· ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠΉ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ "
<< nthSubstrg(3, s, p) << '\n';
cout << p << " Ρ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡΠΌΠΈ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ "
<< nthSubstrg(3, s, p, true) << '\n';
}
ΠΡΠ²ΠΎΠ΄ Π΄Π»Ρ ΡΡΡΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 4.18, Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ.
ATAT Π±Π΅Π· ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠΉ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 18
ATAT Ρ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡΠΌΠΈ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 11
Π‘ΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅Π Π΅ΡΠ΅ΠΏΡ 4.9.
4.11. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΡ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ basic_string find, erase ΠΈ length:
std::string t = "Banana Republic";
std::string s = "nana";
std::string::size_type i = t.find(s);
if (i != std::string::npos) t.erase(i, s.length());
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΡΠ΄Π°Π»ΡΠ΅Ρ s.length() ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ find Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²Π°ΡΠΈΠ°ΡΠΈΠΉ Π½Π° ΡΠ΅ΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΠ΄Π°Π»ΠΈΡΡ Π²ΡΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ, Π° Π½Π΅ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½ΠΈΡ . ΠΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅. ΠΠ»ΠΈ ΡΠ΅Π΄ΡΠΌΠΎΠ΅. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π±ΡΠ΄ΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅: Π½Π°ΠΉΠ΄ΠΈΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π°ΡΠ°Π»Π° ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΄Π°Π»ΠΈΡΡ, Π·Π°ΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ erase Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΈ n ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π³Π΄Π΅ n β ΡΡΠΎ Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°. ΠΠ° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎΠ΄ΡΡΡΠΎΠΊ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ΅ΡΠ΅ΠΏΡΡ 4.9.
Π’Π°ΠΊΠΆΠ΅ Π²Π΅Π»ΠΈΠΊΠ° Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ, ΡΡΠΎ Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠΉ, ΡΠ°ΠΊ ΡΡΠΎΠ±Ρ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ Π»ΡΠ±ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΡΠΈΠΌΠ΅Ρ 4.19 ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΎΠ±ΡΡΡ Π²Π΅ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΄Π°Π»ΡΠ΅Ρ Π²ΡΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½Π° Π² ΡΡΡΠΎΠΊΠ΅.
ΠΡΠΈΠΌΠ΅Ρ 4.19. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ (ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ)
#include <string>
#include <iostream>
using namespace std;
template<typename T>
void removeSubstrs(basic_string<T>& s,
const basic_string<T>& p) {
basic_string<T>::size_type n = p.length();
for (basic_string<T>::size_type i = s.find(p);
i != basic_string<T>::npos; i = s.find(p))
s.erase(i, n);
}
int main() {
string s = "One fish, two fish, red fish, blue fish";
string p = "fish";
removeSubstrs(s, p);
cout << s << '\n';
}
ΠΠ΄Π΅ΡΡ Π²ΡΡ Π²Π°ΠΆΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ erase basic_string. Π <string> ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½ ΡΡΠΈ ΡΠ°Π·Π°. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 4.19 Π²Π΅ΡΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°ΡΠ°ΡΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅, ΠΈ ΡΠΈΡΠ»ΠΎ ΡΠ΄Π°Π»ΡΠ΅ΠΌΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΡΡΠ³Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ Π²Π΅ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ ΠΈ ΡΠ΄Π°Π»ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ. Π§ΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π΅ Π²Π΅ΡΡΠΈΠΈ ΠΈ Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΠΉΡΠ΅ s.erase(iter) Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΈΠ΄ΡΡΠΈΡ ΠΏΠΎΠ΄ΡΡΠ΄ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌΠΈ, Π° Π½Π΅ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΡΠΎΠΊΠΈ (ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ). Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Ρ ΠΈΠ·Π±Π΅ΠΆΠΈΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ erase Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ string Π±ΠΎΠ»Π΅Π΅ Π³ΡΠ°ΠΌΠΎΡΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π΅Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ.
4.12. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡ ΠΈΠ»ΠΈ Π²Π΅ΡΡ Π½Π΅ΠΌΡ ΡΠ΅Π³ΠΈΡΡΡΡ
ΠΠΌΠ΅Π΅ΡΡΡ ΡΡΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡ ΠΈΠ»ΠΈ Π²Π΅ΡΡ Π½Π΅ΠΌΡ ΡΠ΅Π³ΠΈΡΡΡΡ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΠ»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡ ΠΈΠ»ΠΈ Π²Π΅ΡΡ Π½Π΅ΠΌΡ ΡΠ΅Π³ΠΈΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ toupper ΠΈ tolower ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° <cctype>. ΠΡΠΈΠΌΠ΅Ρ 4.20 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. Π‘ΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊ.
ΠΡΠΈΠΌΠ΅Ρ 4.20. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° ΡΡΡΠΎΠΊΠΈ
#include <iostream>
#include <string>
#include <cctype>
#include <cwctype>
#include <stdexcept>
using namespace std;
void toUpper(basic_string<char>& s) {
for (basic_string<char>::iterator p = s.begin();
p != s.end(); ++p) {
*p = toupper(*p); // toupper is for char
}
}
void toUpper<basic_string<wchar_t>& s) {
for (basic_string<wchar_t>::iterator p = s.begin();
p != s.end(); ++p) {
*p = towupper(*p); // towupper is for wchar_t
}
}
void toLower(basic_string<char>& s) {
for (basic_string<char>::iterator p = s.begin();
p != s.end(); ++p) {
*p = tolower(*p);
}
}
void toLower(basic_string<wchar_t>& s) {
for (basic_string<wchar_t>::iterator p = s.begin();
p != s.end(); ++p) {
*p = towlower(*p);
}
int main() {
string s = "shazam";
wstring ws = L"wham";
toUpper(s); toUpper(ws);
cout << "s = " << s << endl;
wcout << "ws = " << ws << endl;
toLower(s);
toLower(ws);
cout << "s = " << s << endl;
wcout << "ws = " << ws << endl;
}
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄.
s = SHAZAM
ws = WHAM
s = shazam
ws = wham
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΡΠΎ-ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ string ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ΅ΡΠΎΠ΄, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΠΈΠΉ Π²ΡΡ ΡΡΡΠΎΠΊΡ ΠΊ Π²Π΅ΡΡ Π½Π΅ΠΌΡ ΠΈΠ»ΠΈ Π½ΠΈΠΆΠ½Π΅ΠΌΡ ΡΠ΅Π³ΠΈΡΡΡΡ, Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΊ Π²Π΅ΡΡ Π½Π΅ΠΌΡ ΠΈΠ»ΠΈ Π½ΠΈΠΆΠ½Π΅ΠΌΡ ΡΠ΅Π³ΠΈΡΡΡΡ, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π΅Π»Π°ΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠ΅ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ° ΡΡΡΠΎΠΊΠΈ (ΠΈ ΠΊΠΎΠ³Π΄Π° Ρ Π³ΠΎΠ²ΠΎΡΡ Β«ΡΡΡΠΎΠΊΠΈΒ», ΡΠΎ ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΊΠ°ΠΊ ΡΠ·ΠΊΠΈΡ , ΡΠ°ΠΊ ΠΈ ΡΠΈΡΠΎΠΊΠΈΡ ). ΠΡΠΎΡΡΠ΅ΠΉΡΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² toupper, towupper, tolower ΠΈ towlower. ΠΠ΅ΡΠ²Π°Ρ ΡΠΎΡΠΌΠ° ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΠ·ΠΊΠΈΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ, Π° Π²ΡΠΎΡΠ°Ρ ΡΠΎΡΠΌΠ° (Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π±ΡΠΊΠ²ΠΎΠΉ w) ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π΅ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠΎΠΌ Π΄Π»Ρ ΡΠΈΡΠΎΠΊΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².