IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Рекурсия со строками в C/C++, Подскажите, пожалуйста
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 78
Пол: Женский

Репутация: -  0  +


Необходимо составить программу, которая считывает произвольный текст и распечатывает в алфавитном порядке все латинские буквы, входящие в этот текст, используя рекурсию.
У меня пока получилась вот такая программа без рекурсии:
// 2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
#include <cstring>
#include <stdlib.h>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{const int MAX=80;char qw[255];
char buffer[3][MAX];
int i=0;
int x,j,dlina,k;char z;
ifstream infile("input.txt");
while (!infile.eof())
{
infile.getline(buffer[i],MAX);
cout << buffer[i] << endl; i++;
};
k=0;dlina=0;
for (i=0;i<3;i++)
{
x=strlen(buffer[i]);dlina=dlina+x;
for (j=0;j<=x;j++)
{
qw[k]=buffer[i][j];k++;};
};
for (z='A';z<='Z';z++)
{
for (i=0;i<=k;i++)
{if ((qw[i]==z)||(qw[i]==(z+32))){cout << qw[i] << "\n";};
};
};
return 0;
}


Подскажите, пожалуйста, как осуществить рекурсию
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Ты знаешь, ничего кроме как переписать программу вот так:
#include <fstream>
#include <iostream>
#include <stdlib.h>
#include <ctype.h>
using namespace std;

int main()
{
int counts['Z' - 'A' + 1][2] = {0};
const int max_len = 1024;
char buffer[max_len];

ifstream infile("input.txt");
while (!infile.eof()) {
infile.getline(buffer, max_len);
cout << buffer << endl;
for(char *p = buffer; *p; p++) {
if(isalpha(toupper(*p))) {
counts[toupper(*p) - 'A'][(*p == toupper(*p)) ? 1 : 0] += 1;
}
}

}
infile.close();

for(int i = 'A'; i <= 'Z'; i++) {
for(int j = 1; j >= 0; j--) {
for(int k = 0; k < counts[i - 'A'][j]; k++) {
cout << (char)(j ? i : tolower(i));
}
}
}
return 0;
}

, а потом сделать процесс чтения из файла и заполнения матрицы counts рекурсивным:
#include <fstream>
#include <iostream>
#include <stdlib.h>
#include <ctype.h>
using namespace std;

int counts['Z' - 'A' + 1][2] = {0};

int read_str(ifstream &is) {
const int max_len = 1024;
char buffer[max_len];

if(!is.eof()) {
is.getline(buffer, max_len);
cout << buffer << endl;
for(char *p = buffer; *p; p++) {
if(isalpha(toupper(*p))) {
counts[toupper(*p) - 'A'][(*p == toupper(*p)) ? 1 : 0] += 1;
}
}
read_str(is);
}
return 0;
}

int main()
{
ifstream infile("input.txt");
read_str(infile);
infile.close();

for(int i = 'A'; i <= 'Z'; i++) {
for(int j = 1; j >= 0; j--) {
for(int k = 0; k < counts[i - 'A'][j]; k++) {
cout << (char)(j ? i : tolower(i));
}
}
}
return 0;
}

, почему-то не придумывается...

Зачем тут вообще нужна рекурсия - непонятно совершенно...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 78
Пол: Женский

Репутация: -  0  +


Да, не слабая программа...
Спасибо большое! smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.12.2020 19:48
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name