Поменять в строке согласные буквы на гласные

Уровень сложности:

Поменять согласные буквы на гласные во введенной пользователем строке, а гласные — на соответствующий ASCII код, используя функции.

Если вы еще не знаете, что такое ASCII код, прочитайте статью — Расширенный набор символов ASCII. Если захотите реализовать данную программу с помощью функций, то не забудьте прочитать статью — Функции в С++. Результат работы программы показан ниже:

// alphavit.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <ctime>
using namespace std;

int poisk(const char *c, const int); // прототип функции 

int main(int argc, char* argv[])
{
    char in_string[101]; // размер вводимой строки ограничивается сотней символов
    cout << "Enter the string of characters: ";
    cin >> in_string;
    cout << "Result: ";
    poisk(in_string, strlen(in_string)); // запуск функции 
    system("pause");
    return 0;
}
int poisk(const char *c,//передаем в функцию введенную строку
          const int size) // размер введенной строки
{
    const char glas[] = "AEIOUYaeiouy"; // массив гласных букв
    const char sogl[] = "BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz"; // массив согласных букв
    srand( time(0) ); //засеваем генератор случайных чисел значением возвращаемым функцией time()
 for (int i = 0; i < size; i++)
 {
     if ( strchr(sogl, c[i]) == NULL) // определяем вхождение символа из введенного массива в массив согласных букв
     {
        cout << int(c[i]) << " "; // заменяем гласную букву на целое значение соответствующее этой букве в таблице аски
     } else
            {
                cout << glas[rand() % 12] << " ";  // заменяем  согласную букву на случайную гласную
            }
 }
 cout << endl;
 return 0;
}

Пример работы программы:

CppStudio.com

Enter the string of characters: cppstudio
Result: O E i o o 117 e 105 111

Следующие статьи помогут вам в решении данной задачи:
Автор: admin
Дата: 11.09.2012
Поделиться:

Комментарии

  1. Роман Максимов

    /*
      ѕомен€ть согласные буквы на гласные во введенной пользователем
      строке, а гласные - на соответсвующий ASCII код, использу€ функции.
    */
    //---------------------------------------------------------------------------
    #include <iostream>
    //---------------------------------------------------------------------------
    using namespace std;
    //---------------------------------------------------------------------------
    char vowel() {
      char vowels[12] = "AEIOUYaeiouy";  
      srand(time(NULL));
      return vowels[(rand() % 12)];
    }
    //---------------------------------------------------------------------------
    bool isConsonant(char symbol) {
      char consonants[] = "BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz";
      return strchr(consonants, symbol) ? true : false;
    }
    //---------------------------------------------------------------------------
    int main()
    {
      string str;
    
      cout << "Enter the string of characters: ";
      cin >> str;
    
      cout << "Result: ";
      for (int i = 0; i < str.size(); i++)
        if (isConsonant(str[i])) cout << vowel() << " ";
        else cout << (int)str[i] << " ";     
    
      cout << endl;
    
      system("pause");
      return 0;
    }
    //---------------------------------------------------------------------------
    
    

     

  2. Anufree

    #include <iostream>
    #include <string>
    #include <ctime>
    
    using namespace std;
    
    int main()
    {
    	setlocale(LC_ALL, "Russian");
    	
    	srand(time(0));
    
    	bool b = false;
    	char arr[] = { 'A', 'a', 'E', 'e', 'I', 'i', 'U', 'u', 'O', 'o', 'Y', 'y' };
    	string str;
    
    	cout << "Enter the string of characters: ";
    	cin >> str;
    
    	cout << "Result: ";
    	for (int i = 0; i < str.size(); ++i)
    	{
    		b = false;
    		for (int j = 0; j < sizeof(arr); ++j)
    		{
    			if (str[i] == arr[j])
    			{
    				cout << int(str[i]) << ' ';
    				b = true;
    			}
    		}
    		if (b == false)
    		{
    			cout << arr[2 + rand() % 10] << ' ';
    		}
    	}
    	cout << endl;
    
    	system("pause");
    
    	return 0;
    }

     

  3. Boss

    #include <iostream>
    #include <windows.h>
    #include <ctime>
    using namespace std;
    int main()
    {
    	srand(time(0));
    	char startstring[30];
    	char consonant[20] = {'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'z'};
    	char vowel[12] = {'A', 'a', 'E', 'e', 'I', 'i', 'O', 'o', 'U', 'u', 'Y', 'y'};
    	cout << "Enter the string: ";
    	cin >> startstring;
    	for (int i = 0; i < strlen(startstring); i++)
    	{
    		int counter1(0);
    		// Find all consonant letters and change they to lowercase
    		for (int j = 0; j < strlen(vowel); j++)
    		{
    			if (startstring[i] == vowel[j])
    				counter1 = 1;
    		}
    		if (counter1 == 0)
    			startstring[i] = tolower(startstring[i]);
    		// Change consonant letters to vowel
    		for (int j = 0; j < strlen(consonant); j++)
    		{
    			if (startstring[i] == consonant[j])
    				cout << vowel[rand() % (strlen(vowel))] << " ";
    		}
    		// Change vowel letters to ASCII code
    		for (int j = 0; j < strlen(vowel); j++)
    		{
    			if (startstring[i] == vowel[j])
    			{
    				cout << static_cast<int>(startstring[i]) << " ";
    			}
    		}	
    	}
    cin.sync();	
    cin.get();
    return 0;
    }
    • Boss

      Вопрос по альтернативному решению задания. Все решения, указанные выше, анализируют исходную строку и далее используют функцию вывода результата на экран. Задачу можно решить иначе: анализировать исходную строку и записывать результат в другую строку, которую далее выводить на экран. Понятно, что для решения задачи достаточно и первого варианта, но второй вариант более универсальный.

      При попытке создать программу по второму варианту столкнулся с проблемой записи в итоговую сроку номера символа ACSII. Например, ‘A’ соответствует 65. Для записи числа 65 в строку нужны два символа с кодами 54 и 53. В этом случае задача становится куда более сложной. Буду признателен, если светлая голова выложит решение данной задачи. P.S. готовой штатной функции перевода символа в ASCII код и запись его в переменную типа char не нашел. Скорее всего, не существует.

  4. Smile Time

    #include <iostream>
    #include <conio.h>
    #include <windows.h>
    #include <string>
    #include <ctime>
    
    using namespace std;
    
    const int iMaxSize = 255;
    void swapAndOther(char*, int);
    
    int main()
    {
    	SetConsoleCP(1251);
    	SetConsoleOutputCP(1251);
    	srand(time(0));
    	char strMain[iMaxSize];
    	cout << "Введите строку: ";
    	cin.getline(strMain, iMaxSize);
    	swapAndOther(strMain, strlen(strMain));
    
    	cout << endl;
    	system("pause");
    	return 0;
    }
    
    void swapAndOther(char *temp, int iSize)
    {
    	char vowels[] = "ЙйУуЕеЪъЫыАаОоЭэЯяИиЬьЮю";
    	char consonants[] = "ЦцКкНнГгШшЩщЗзХхФфВвПпРрЛлДдЖжЧчМмТтБб";
    	cout << "Изменённая строка: ";
    	for (int i = 0; i < iSize; i++){
    
    		for (int j = 0; j < strlen(vowels); j++){	//проверяем гласные
    			if (temp[i] == vowels[j])
    				cout << (int)temp[i] << ' ';
    		}
    		for (int j = 0; j < strlen(consonants); j++){	//проверяем согласные
    			if (temp[i] == consonants[j]){
    				temp[i] = vowels[rand() % strlen(vowels)];
    				cout << temp[i] << ' ';
    			}
    		}
    	}
    }
  5. NaikoN

    #include <iostream>
    #include <time.h>
    #include <cstdlib>
    using namespace std;
    void fn_change(string,string);
    int main()
    {
        srand(time(NULL));
        string vowel="aeiouy",enter_str,new_vowel;
        cin>>enter_str;
        for(int i=0;i<enter_str.length();++i)///выбираем все гласные из введенной строки
         {
            for(int j=0;j<vowel.length();++j)
            {
                if(enter_str[i]==vowel[j])
                {
                    new_vowel+=enter_str[i];
                }
            }
         }
        fn_change(enter_str,new_vowel);
        return 0;
    }
    void fn_change(string enter_str,string new_vowel)
    {
         for(int i=0;i<enter_str.length();++i)
        {
            for(int j=0;j<new_vowel.length();++j)
            {
                if(enter_str[i]==new_vowel[j])///если гласныя буква
                {
                    cout<<int(enter_str[i])<<ends;
                    break;
                }
                if(j==new_vowel.length()-1)
                {
                    ///выбирает случайную гласную букву из введенной пользователм строки
                      cout<<new_vowel[0+rand()%new_vowel.length()]<<ends;///если согласная
                }
            }
    
        }
    }
  6. plaha

    void charReplace(char user[]) {
        char glasn[] = "aeiouy";
        char soglasn[] = "bcdfghjklmnpqrstvwxz";
    
            for(int i = 0; i < strlen(user); i++) {
            for(int j = 0; j < strlen(soglasn); j++) {
            if(user[i] == soglasn[j]) {
                cout << glasn[rand() % strlen(glasn)] << " ";
            } else if(user[i] == glasn[j]){
                cout << (int)user[i] << " ";
            }
        }
        }
        
    }
    int main() {
        
        srand(time(0));
        
        char user[50];
    
        cout << "Введите слово: ";
        cin >> user;
    
        charReplace(user);
        
        return 0;
    }

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.