Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.84
Михей91
5 / 5 / 1
Регистрация: 27.12.2009
Сообщений: 69
#1

Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных (Написано на Паскале, переделать под C++) - C++

29.12.2009, 17:38. Просмотров 3306. Ответов 10
Метки нет (Все метки)

Всем доброго вечера.
Собственно само задание в заголовке.
Написана программа в Паскале, вот как на С++ ее переделать, из-за неимения большого опыта к сожалению не знаю (
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
program example1; 
const 
  glasn=['а','е','и','о','у','ы','э','ю','я']; 
   soglas=['б','в','г','д','ж','з','й','л','м',
         'н','р','к','п','с','т','ф','х','ц','ч','ш','щ'];
 var
   st: string; 
     g,s,i:integer; 
begin 
  write('Введите строку> '); readln(st); 
    g:=0; s:=0; 
      for i:= 1 to length(st) do 
        if st[i] in glasn then inc(g) else if st[i] in soglas then inc(s);
        if g> s then writeln('Гласных больше')
    else if g< s then writeln('Согласных больше')
  else writeln('Согласных и гласных букв поровну');
 readln; 
end.
Помимо всего этого нужно чтобы строка выводилась из файла (my.txt тект в файле "Привет"):
C++
1
2
3
4
5
6
7
8
ifstream file;
 
file.open("my.txt");
for (i=0; feof(file); ++i)
 {
file>> a[i];
cout<<a[i]
 };
Наверно что-то типа такого )


Еще есть код на VC++, в нем я вообще ничего не понимаю )))
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <locale>
#include <iostream>
#include <string>
 
using namespace std;
 
bool isVowels(wchar_t ch)
{
 return static_cast<wstring>(L"аеёиоуыэюя").find(towlower(ch))!=wstring::npos;
}
 
int
main()
{
 locale::global(locale("rus_rus.866"));
 wcout<<L"Введите произвольную текстовую строку:"<<endl;
 wstring str;
 wcin.setf(ios::skipws);
 getline(wcin,str);
 unsigned int vowels=0,
     consonants=0;
 for(wstring::const_iterator it=str.begin();it!=str.end();it++)
 {
  if(iswalpha(*it))
  {
   if(isVowels(*it))vowels++;
   else consonants++;
  }
 }
 wcout<&l
 t;L"Гласных:"<<vowels<<endl;
 wcout<<L"Согласных:"<<consonants<<endl;
 if(vowels>consonants)wcout<<L"Гласных больше";
 else if(vowels<consonants)wcout<<L"Гласных меньше";
 else wcout<<L"Гласных и согласных поровну";
 wcout<<endl;
 system("PAUSE");
 return 0;
}
Друзья, помоги плиз... второй день уже сижу, а продвижения никакого ((((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2009, 17:38     Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных (Написано на Паскале, переделать под C++)
Посмотрите здесь:
Строка содержит произвольный русский текст. Проверить, каких букв в нем больше, гласных или согласных C++
C++ Определить, каких букв — гласных или согласных — больше в данном тексте
C++ Определить каких букв больше в строке: гласных или согласных и на сколько.
Дан текст. Определить, каких букв в нем больше k или m. C++
C++ Дан файл, содержащий произвольный текст; определить, чего в нем больше: цифр или букв
Дан файл, содержащий произвольный текст. Выяснить, чего в нем больше: русских букв или цифр C++
C++ Дана строка, содержащая произвольный текст. Проверить, правильно ли в нем расставлены круглые скобки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tani
25 / 25 / 1
Регистрация: 27.12.2009
Сообщений: 82
30.12.2009, 04:41     Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных (Написано на Паскале, переделать под C++) #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    
 
 {
int g=0,s=0;
const 
  char glasn[]="аеиоуыэюя",
   soglas[]="бвгджзйлнркпстфхцчшщ";
 cout<<"Введите строку";
 cin.getline(st,30); 
   while(st[i]!=0)
 {
for(i=0;i<strlen(glasn);i++)
{
  if(strstr(st,glasn[i]!=0)
k=++;
}
 
for(i=0;i<strlen(glasn);i++)
{
  if(strstr(st,soglas[i]!=0)
s=++;
}
}
        
        if (g> s)
  cout <<" Гласных больше";
    else  if (g=s) 
    cout <<"Согласных и гласных букв поровну";
     else cout <<"Согласных больше";
return 0;
Подключишь заголовочный файл (строки), страндартную шапку сам напишешь
Михей91
5 / 5 / 1
Регистрация: 27.12.2009
Сообщений: 69
30.12.2009, 11:13  [ТС]     Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных (Написано на Паскале, переделать под C++) #3
Tani, спасибо, а как быть с вводом строки из файла? моим методом пишет только первую букву...
Михей91
5 / 5 / 1
Регистрация: 27.12.2009
Сообщений: 69
07.01.2010, 18:26  [ТС]     Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных (Написано на Паскале, переделать под C++) #4
А кто-нибудь может написать эту программу полностью и правильно?!
1) Я никак не могу сделать чтобы он нормально выводил из файла.
2) Написанная Tani программа не компилиться, в ней дохрена ошибок (((
Вообщем я чувствую себя бессильным...

Добавлено через 18 часов 52 минуты
Ребят, ну блин нихрена не получается (((((
Tani
25 / 25 / 1
Регистрация: 27.12.2009
Сообщений: 82
07.01.2010, 19:07     Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных (Написано на Паскале, переделать под C++) #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <string.h>
using namespace std ;      
int main(void) 
 {
int s=0,k=0,i,j;
char st[30];
const 
  char glasn[]="аеиоуыэюя",
   soglas[]="бвгджзйлнркпстфхцчшщ";
 cout<<"VVedite stroky"<< endl;
 cin.getline(st,30); 
   for(i=0;st[i]!=0;i++)
 {
for(j=0;glasn[j]!=0;j++)
{
  if(st[i]==glasn[j])
k++;
}
 
for(j=0;soglas[j]!=0;j++)
{
  if(st[i]==soglas[j])
s++;
}
}
        
        if (k> s)
  cout <<" Glasn >";
    else  if (k=s) 
    cout <<"Porovny";
     else cout <<"Soglas>";
return 0; 
 
}
А как с файлом работать я еще не знаю((
Михей91
5 / 5 / 1
Регистрация: 27.12.2009
Сообщений: 69
07.01.2010, 22:55  [ТС]     Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных (Написано на Паскале, переделать под C++) #6
Tani, мелкие ошибки исправил, но все равно не компилит... ругается на using namespace std ; - Declaration syntax error.
и return 0; - Function should return a value ; Declaration terminated incorrectly.

Добавлено через 2 часа 1 минуту
Вообщем для примера написал с английским алфавитом....
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <string.h>
#include <conio.h>
#include <iostream.h>
#include <fstream.h>
 
 
int main(void)
 {
int s=0,k=0,i,j;
char st[30];
const
  char glasn[]="aoiyeu",
   soglas[]="bpvfdtzsjgkhmnlr";
 
clrscr();
 
ifstream file;
file.open("my.txt");
for (i=0; st[i]!=0; ++i)
 {
  file>>st;
  cout<<st;
  cout<<" ";
 }
 
 
   for(i=0;st[i]!=0;i++)
    {
    for(j=0;glasn[j]!=0;j++)
     {
      if(st[i]==glasn[j])
       k++;
     }
 
    for(j=0;soglas[j]!=0;j++)
     {
      if(st[i]==soglas[j])
       s++;
     }
    }
 cout<<"\n";
 if (k> s)
  cout <<" Glasn >";
 else
  if (k==s)
   cout <<"Porovny";
  else
   cout <<"Soglas>";
 
getch();
return 0;
 
}
В файле написано "privet" . Итог, программа постоянно выдает результат: Porovny! Ошибку не вижу (
NikSer
Сообщений: n/a
07.01.2010, 23:23     Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных (Написано на Паскале, переделать под C++) #7
У меня правильно выдает результат. Может ты просто не сохранил файл, после того как написал там, и программа работала с пустым файлом.
Также считывание у тебя неправильно, поскольку cin считывает до первого разделителя пробела, лучше пользоваться getline.
Сначало в st может находиться что угодно, в том числе и \0 на первом месте, тогда считывание ни разу не произойдет. Допустим, что там не нулевой символ, тогда произойдет первое считывание и нулевой символ установится в st на месте на 1 большем чем длина слова и тогда, произойдет считывание столько раз, сколько символов в слове.
Михей91
5 / 5 / 1
Регистрация: 27.12.2009
Сообщений: 69
07.01.2010, 23:41  [ТС]     Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных (Написано на Паскале, переделать под C++) #8
NikSer, можно код увидеть?
NikSer
Сообщений: n/a
07.01.2010, 23:53     Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных (Написано на Паскале, переделать под C++) #9
Вот работающий код на C++ Builder 6.0
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <string.h>
#include <conio.h>
#include <iostream.h>
#include <fstream.h>
 
 
int main(void)
 {
int s=0,k=0,i,j;
char st[30];
const
  char glasn[]="aoiyeu",
   soglas[]="bpvfdtzsjgkhmnlr";
 
clrscr();
 
ifstream file;
file.open("my.txt");
 
file.getline(st,30);
cout<<st;
cout<<" ";
 
   for(i=0;st[i]!=0;i++)
    {
    for(j=0;glasn[j]!=0;j++)
     {
      if(st[i]==glasn[j])
       k++;
     }
 
    for(j=0;soglas[j]!=0;j++)
     {
      if(st[i]==soglas[j])
       s++;
     }
    }
 cout<<"\n";
 if (k> s)
  cout <<" Glasn >";
 else
  if (k==s)
   cout <<"Porovny";
  else
   cout <<"Soglas>";
 
getch();
return 0;
 
}
Кстати, в Tani в посте номер 5 код запускается на Visual C++ без проблем. Если бы там использовались английские символы, то работала бы программа правильно.
Михей91
5 / 5 / 1
Регистрация: 27.12.2009
Сообщений: 69
08.01.2010, 01:28  [ТС]     Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных (Написано на Паскале, переделать под C++) #10
Tani, NikSer, спасибо за помощь, довел программу до ума ;-)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2012, 12:24     Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных (Написано на Паскале, переделать под C++)
Еще ссылки по теме:
C++ Вводится строка. Каких букв в строке больше 'а' или 'в'
C++ Проверить на содержание одинакового количества гласных и согласных букв
C++ Вывести слова, содержащие гласных букв больше, чем согласных
Определить слова, в которых больше гласных букв, чем согласных C++
В строке найти слова, в которых гласных букв больше, чем согласных C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Virusssssssssss
0 / 0 / 0
Регистрация: 18.05.2012
Сообщений: 16
07.06.2012, 12:24     Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных (Написано на Паскале, переделать под C++) #11
Сторока содержит произвольный текст.Сформировать массивы гласных и согласных букв.Если строка содержит знаки препинания удалить их
Yandex
Объявления
07.06.2012, 12:24     Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных (Написано на Паскале, переделать под C++)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru