Решение задач по теме “Символьная строка. Класс string”

  • Посимвольный анализ строки, изменение символов в строке. Дана строка латинских символов (четверостишие), с ограничителем строки – точка (в конце строки). Определить в этом четверостишии количество слов и вывести эту строку, преобразовав символы этой строки к верхнему регистру.
  • #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
    	string myStr;
    	int k = 0;
    	cout << "Введите строку:" << endl;
    	getline(cin, myStr, '.');
    	for (auto i = 0; i < myStr.size(); i++) {
    		if (myStr[i] == ' ' || myStr[i] == '\n') k++;
    		myStr[i] = toupper(myStr[i]);
    	}
    	cout << "\nВ этом предложении " << k + 1 << " слов" << endl;
    	cout << "Измененная строка:" << endl << endl;
    	cout << myStr << '.' << endl;
    	return 0;
    }
    
    Введите строку:
    My lonely heart athirst, I trod
    A barren waste when, so 'twas fated,
    A winged seraph 'fore me stood:
    Where crossed the desert roads he waited.
    
    В этом предложении 26 слов
    Измененная строка:
    
    MY LONELY HEART ATHIRST, I TROD
    A BARREN WASTE WHEN, SO 'TWAS FATED,
    A WINGED SERAPH 'FORE ME STOOD:
    WHERE CROSSED THE DESERT ROADS HE WAITED.
    

    Примечание. Инструкция цикла for основанная на диапазоне может сделать вашу программу значительно лаконичнее (в переменную s будут передаваться символы строки):

     for (auto &s : myStr) {
            if (s == ' ' || s == '\n') k++;
            s = toupper(s);
        }
    
  • Изменение строки. Удаление символов. Дана строка S. Слова в этой строке разделены одним или более пробелами. Пробелы могут быть в начале и в конце строки. Удалить лишние пробелы (а также пробелы в начале и в конце), оставив между словами по одному пробелу.
  • #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        string S;
        string::size_type i = 0;
        cout << "Введите строку:" << endl;
        getline(cin, S);
        // удаляем пробелы в начале строки
        while (S[i] == ' ') S.erase(i, 1);
        // теперь будем удалять с конца
        i = S.size();
        while (i > 0) {
        	--i;
        	// удаляем все пробелы в конце
            if (i == S.size() - 1 && S[i] == ' ')
            	while (S[i] == ' ')
            		S.erase(i, 1);
            // пропускаем один для разделения слов
            if (S[i] == ' ')
            	--i;
            // остальные удаляем
            while (S[i] == ' ')
            	S.erase(i, 1);
        }
        cout << "Модифицированная строка: " << endl;
        cout << S << endl;
        return 0;
    }
    
    Введите строку:
       ww  wwwww    wwww
    Модифицированная строка: 
    ww wwwww wwww
    
  • Изменение строки. Поиск и замена символов. Даны строки S, S1 и S2. Заменить в строке S все вхождения строки S1 на строку S2.
  • #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        string S, S1, S2, Scopy;
        cout << "Введите строку S:" << endl;
        getline(cin, S);
        // S изменится, поэтому сохраняем
        Scopy = S;
        cout << "Введите подстроку S1:" << endl;
        getline(cin, S1);
        cout << "Введите строку замены S2:" << endl;
        getline(cin, S2);
        string::size_type k = S1.size();
        while (S.find(S1) != string::npos) {
            // замена k символов подстроки S1,
        	// начиная с позиции i,
            // на символы подстроки-замены - S2
        	string::size_type i = S.find(S1);
            S.replace(i, k, S2);
        }
        cout << "Исходная строка:\n"
             << Scopy << endl
             << "Модифицированная строка:\n"
             << S << endl;
    
        return 0;
    }
    
    Введите строку S:
    qqqqqwwqqqqqqww
    Введите подстроку S1:
    ww
    Введите строку замены S2:
    ssss
    Исходная строка: 
    qqqqqwwqqqqqqww
    Модифицированная строка: 
    qqqqqssssqqqqqqssss
    
  • Практические задания
  • 1. Дан символ C и строки S, S0. Перед каждым вхождением символа C в строку S вставить строку S0.
    2. Дана строка, содержащая по крайней мере один символ пробела. Вывести подстроку, расположенную между первым и последним пробелом исходной строки. Если строка содержит только один пробел, то вывести пустую строку.

Print Friendly, PDF & Email

Добавить комментарий