Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
#1

переделать чаровскую прогу по строкам в string - C++

23.11.2011, 20:48. Просмотров 1246. Ответов 22
Метки нет (Все метки)

Вот задание проги:
Словом в строке считается последовательность букв латинского алфавита, остальные символы являются разделителями между словами. За один просмотр символов строки найти все слова с максимальной долей гласных букв (т.е. прописных и строчных символов ’a’, ’e’, ’i’, ’o’, ’u’, ’y’) и занести их в новую строку. Слова в новой строке должны разделяться ровно одним пробелом
и вот прога с использованием строки с типом char *:
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 <iostream>
using namespace std;
 
void main ()
{
setlocale(LC_ALL, ".1251");
char *str=new char [301];
cout<<"Введите строку.\n";
cin.getline(str, 301);
char *str1=new char [301];
strcpy(str1,str);
char *str2[30];
int z, i=0, kol=0, kol1=0, r=0, len=strlen(str1);
while (r<len)
{
if ((((str1[r]>='a')&&(str1[r]<='z'))||((str1[r]>='A')&&(str1[r]<='Z')))&&((r==0)||((str1[r-1]<'A')||((str1[r-1]>'Z')&&(str1[r-1]<'a'))||(str1[r-1]>'z'))))
{
for (z=r; (((str1[z]>='a')&&(str1[z]<='z'))||((str1[z]>='A')&&(str1[z]<='Z'))); ++z)
{
if ((str1[z]=='a')||(str1[z]=='o')||(str1[z]=='e')||(str1[z]=='i')||(str1[z]=='u')||(str1[z]=='y')||(str1[z]=='A')||(str1[z]=='O')||(str1[z]=='E')||(str1[z]=='U')||(str1[z]=='Y')||(str1[z]=='I'))
++kol;
else
++kol1;
}
str1[z]='\0';
if (kol>kol1)
{
str2[i]=&str1[r];
++i;
}
r=z+1;
kol1=0,kol=0;
}
else
++r;
}
if (i==0)
cout<<"В введённой строке нет слов с максимальной долей гласных букв.\n";
else
{
char final[300];
strcpy(final,str2[0]);
for (int g=1; g<i; ++g)
{
strcat(final," ");
strcat(final,str2[g]);
}
cout<<final<<endl;
}
}
помогите пожалуйста ее переделать, чтобы всместо чаровских были задействованы Строки String
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2011, 20:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос переделать чаровскую прогу по строкам в string (C++):

Задача по строкам!String - C++
Помогите пожалуйста с задачей по строкам.. String Вводится предложение строка,вывести все слова с тремя буквами i,разделитель между...

Вопрос по строкам (string) - C++
нужно взять с клавиатуры 2 строки...ну я недолго думая решил воспользоваться методом getline(), потому как манипулятор skipws не работает...

Нужно переделать прогу! - C++
Нужно переписать код, чтобы не было меток)))) #include&lt;math.h&gt; #include&lt;stdio.h&gt; #include&lt;alloc.h&gt; #include&lt;conio.h&gt; ...

Как переделать прогу?? - C++
Вот программа на языке си++. как её переделать в си??? там надо вроде cout изменить. помогите!условие: вывести 10 случайных чисел в...

Переделать прогу с паскаля в Вижуал - C++
вот прога на Паскале, надо переделать под вижуал... срочно... http://pascal.sources.ru/cgi-bin/show.cgi?cat=incoming&amp;id=polynom ...

Задачи по строкам. Решение желательно через string - C++
1. Дана строка, состоящая из русских слов разделенных пробелами(одним или несколькими). Вывести строку, содержащую эти же слова,...

22
-=ЮрА=-
Заблокирован
Автор FAQ
01.12.2011, 21:55 #16
Цитата Сообщение от Алексей_123 Посмотреть сообщение
не считает остальные символы разделителями между словами
- вытрите все символы !?,. посредством string::erase перед тем как запихнуть текст в stringstream
0
-=ЮрА=-
Заблокирован
Автор FAQ
01.12.2011, 22:13 #17
В прочем, вот код
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
#include <iostream>
#include <sstream>
using namespace std;
 
//Вернёт true если гласных в слове больше чем согласных
bool IsMoreVowels(string str)
{
    string vowels = "aeiouy";
    int length = str.length();
    int i, nVowels = 0;
    for(i = 0; i < length; i++)
    {
        if(vowels.find(tolower(str[i]),0) != -1)
            nVowels++;
    }
    return (length - nVowels) < nVowels;
}
 
void ErasePunktSigns(string &str)
{
    string delims = ",.!?;-";
    for(int i = 0,pos; i < delims.length(); i++)
    {
        //Методично стираем все знаки пунктуации
        while((pos = str.find(delims[i],0)) != -1)
            str.erase(pos,1);
    }
}
 
int main()
{
    //setlocale(LC_ALL, ".1251");
    system("chcp 1251");
    char text[1024] = {0};
    cout<<"Введите строку (не более 1024 символов)\n";
    cin.getline(text, 1024);
    string str = text, output;
    ErasePunktSigns(str);
    cout<<"String after erasing delimeters :\n"<<str.c_str()<<endl;
 
    stringstream ss;
    ss.str(str);
    
    while(ss>>str)
    {
        if(IsMoreVowels(str))
            output += (str + " ");
    }
    cout<<"Words with MoreVowels : "<<output.c_str()<<endl;
    system("pause");
    return 0;
}
1
Миниатюры
переделать чаровскую прогу по строкам  в string  
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
04.12.2011, 16:53  [ТС] #18
вы наверное не так поняли, мне нужно было, чтобы он считал все остальные знаки, как знак пробела : то есть строку the.cat переделал в the cat
0
-=ЮрА=-
Заблокирован
Автор FAQ
04.12.2011, 16:55 #19
Цитата Сообщение от Алексей_123 Посмотреть сообщение
вы наверное не так поняли, мне нужно было, чтобы он считал все остальные знаки, как знак пробела : то есть строку the.cat переделал в the cat
Алексей я сделал вытирку символов пунктуации т.е ваше the.cat стало thecat
0
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
04.12.2011, 18:10  [ТС] #20
а мне по заданию необходимо ,чтобы вместо the.cat на месте точке стал пробел , то есть the cat
0
-=ЮрА=-
Заблокирован
Автор FAQ
04.12.2011, 21:44 #21
Цитата Сообщение от Алексей_123 Посмотреть сообщение
а мне по заданию необходимо ,чтобы вместо the.cat на месте точке стал пробел , то есть the cat
- тогда вообще просто либо заменили pos символ на пробел, либо стёрли string::erase и вставили пробел string::insert
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
54
55
56
57
58
#include <iostream>
#include <sstream>
using namespace std;
 
//Вернёт true если гласных в слове больше чем согласных
bool IsMoreVowels(string str)
{
    string vowels = "aeiouy";
    int length = str.length();
    int i, nVowels = 0;
    for(i = 0; i < length; i++)
    {
        if(vowels.find(tolower(str[i]),0) != -1)
            nVowels++;
    }
    return (length - nVowels) < nVowels;
}
 
void ErasePunktSigns(string &str)
{
    string delims = ",.!?;-";
    for(int i = 0,pos; i < delims.length(); i++)
    {
        //Методично стираем все знаки пунктуации
        //и заменяем их на пробелы
        while((pos = str.find(delims[i],0)) != -1)
        {
            str[pos] = ' ';
        //  аналогично методами
        //  str.erase(pos,1);
        //  str.insert(pos," ");
        }
    }
}
 
int main()
{
    //setlocale(LC_ALL, ".1251");
    system("chcp 1251");
    char text[1024] = {0};
    cout<<"Введите строку (не более 1024 символов)\n";
    cin.getline(text, 1024);
    string str = text, output;
    ErasePunktSigns(str);
    cout<<"String after erasing delimeters :\n"<<str.c_str()<<endl;
 
    stringstream ss;
    ss.str(str);
    
    while(ss>>str)
    {
        if(IsMoreVowels(str))
            output += (str + " ");
    }
    cout<<"Words with MoreVowels : "<<output.c_str()<<endl;
    system("pause");
    return 0;
}
1
Миниатюры
переделать чаровскую прогу по строкам  в string  
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
05.12.2011, 20:31  [ТС] #22
а можно еще узнать, что выполняет функция stringstream ss?
0
-=ЮрА=-
Заблокирован
Автор FAQ
05.12.2011, 20:47 #23
Цитата Сообщение от Алексей_123 Посмотреть сообщение
а можно еще узнать, что выполняет функция stringstream ss?
- это не функция а поток сходный с fstream-ским
http://www.cplusplus.com/reference/iostream/stringstream/stringstream/
1
05.12.2011, 20:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2011, 20:47
Привет! Вот еще темы с ответами:

переделать программу Pascal -> C++ (Восстановить исходную матрицу и напечатать ее по строкам) - C++
с паскаля на с++...буду очень признателен. вот текст задачи. Квадратная матрица, симметричная относительно главной диагонали, задана своим...

Как переделать прогу для работы с файлами - C++
Всем привет) Есть вот такая программа. Она выводит на консоль сообщение - находится ли точка на прямой или нет. Координаты точки -...

Можно ли данную прогу переделать в справочную систему компонентов компьютерной техники?!!! - C++
Помогите пожалуйста!!!!!!!!!!!! Можно ли данную прогу(учет книг в библиотеке) переделать в справочную систему компонентов компьютерной...

Выручайте! Нужно переделать прогу под двусвязный список.ничего не понимаю) - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; struct Node { int memSize; Node *Next; }; Node *BegList; using namespace...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Опции темы

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