0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 5
1

Из заданного файла удалить все слова c двумя согласными и вывести на экран оставшиеся слова

19.12.2015, 16:15. Показов 5658. Ответов 7
Метки нет (Все метки)

Привет всем, в с++ не очень шарю, а до строк в изучении еще не дошел , поэтому не пойму как делать
Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Удалить из каждой строки те слова, которые содержат двойные согласные буквы. Зада главную функцию, создаем файл, а вот как проверить на согласность + чтобы удвоенная была + удалить все это их строкового массива я не понимаю.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2015, 16:15
Ответы с готовыми решениями:

Если указанная буква есть в предложении - все слова с ней удалить и вывести оставшиеся
Добрые день. Наткнулся на задачки, суть которых такова: С клавиатуры вводится предложение 1)...

Найти в файле все слова с двумя согласными буквами
Задание: считать файл, записать в список, найти слова с 2 негласными буквами, подсчитать их...

Удалить слова, которые содержат все буквы заданного слова, и продублировать остальные слова
Разделитель — один из символов « ,.;:!?"'» (начиная с пробела и заканчивая апострофом). Буква —...

Выбрать из заданного текстового файла все слова, содержащие заданный символ и вывести на экран
Если не сложно помогите с задачей. Может быть код у кого-нибудь уже есть, задача то простая.. ...

7
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 5
09.01.2016, 15:02  [ТС] 2
Я 3 дня сижу с ней

Добавлено через 24 секунды
вот, что смогу найти\собрать\написать
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#define _CRT_SECURE_NO_WARNINGS
#include<fstream>
#include<string>
#include<iostream>
 
using namespace std;
 
const int RAS = 80;
typedef char telem[RAS];
typedef string tmass[RAS];
 
int so_glasn(char ch); // првоерка на согласность 
void sravn(tmass b, int i);    //процедураудаленияповторяющихсяслов
 
int main()
{
    setlocale(LC_ALL, "Russian");      //установлениерусскойлокализации
    FILE *fin;
    fopen_s(&fin, "input.txt", "rt");     //открытиефайладлячтения
 
    int i;   //переменная для цикла
    telem str;   //первая строка
    tmass b;   //массив для обработки текста
    string input;   //строка для вывода    
    char *kon;   //указатель на лексему
 
    while (!feof(fin))        //пока не кончится файл, продолжаем цикл
    {
        fgets(str, RAS, fin);          //занисение строки из файла
        kon = strtok(str, " ");         //выделение первой лексемы
        for (i = 0; kon != NULL; i++)     //перенос всех лексем в массив
        {
            b[i] = kon;
            kon = strtok(NULL, " \n");
        }
        sravn(b, i);   //удаление повторяющихся слов
        for (int j = 0; j < i; j++) //переносим все остальные слова в друю строку
        {
            if (b[j][0] != '\0') input += b[j] + ' ';
        }
        cout << input;   //выводимстроку
        input = '\n';
    }
    getchar();
    return 0;
}
 
int so_glasn(char ch)
{
    static char so_gl[] = "БбВвГгДдЖжЗзКкЛлМмНнПпРрСсТтФфХхЦцЧчШшЩщ\0";
    int i = 0;
 
    while (so_gl[i] && so_gl[i] != ch)
        i++;
    if (so_gl[i])
        return(1);                  //значит буква - согласная
    else return(0);             //значит буква - не согласная
 
 
}
//процедура удаления повторяющихся слов
void sravn(tmass b, int i)
{
 
    if (*p == so_glasn && *(p + 1) == so_glasn)
    {
        do
            p--;
        while (*p != 32 && p != text[0]);// 32 код пробела для vc++
        do
        {
            cout << *p;
            p++;
        } while (*p != 32 && *p != '\0');
 
    }
    i++
}
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
09.01.2016, 16:05 3
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
// Example program
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
 char str[]=" rjhk ff   uu gg ";
 
 
cout<<str<<endl;
 char sogl[]="qwrtypsdfghklzxcvbnm";
 int n=strlen(str);
 for (int i=0;i<n;i++)
 if (str[i]!=' ')
 {
     int j=i+1;
     bool fl=true,f=true;
     char simbol;
     while(str[j]!=' ' && fl)
         {if (str[j]==str[j-1]) {fl=false; simbol=str[j];}
         j++;}
     if (!fl)
     {
     for (int k=0;sogl[k]!='\0' && f;k++)
        if (sogl[k]==simbol) f=false;
     if (!f)
     {
        while (str[j]!=' ') j++;
 
     int len=j-i;
     for (int k=i; k<n, j<n;k++,j++)
        str[k]=str[j+1];
     n-=len+1;
     i+=len;
     }
     }
 }
 
 
cout<<str<<endl;
 
 
}
1
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 5
09.01.2016, 22:12  [ТС] 4
Огромное спасибо, а то сдавать надо уже скоро. Спасибо, Спасибо, Спасибо!!!!!)
0
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 5
11.01.2016, 17:17  [ТС] 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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#define _CRT_SECURE_NO_WARNINGS
#include<fstream>
#include<string>
#include<iostream>
 
using namespace std;
 
const int RAS = 80;
typedef char telem[RAS];
typedef string tmass[RAS];
 
void sravn(tmass b, int i);    
 
int main()
{
    setlocale(LC_ALL, "Russian");      //установлениерусскойлокализации
    FILE *fin;
    fopen_s(&fin, "D:\\input.txt", "rt");     //открытиефайладлячтения
 
    int i;   //переменная для цикла
    telem str;   //первая строка
    tmass b;   //массив для обработки текста
    string input;   //строка для вывода    
    char *kon;   //указатель на лексему
 
    while (!feof(fin))        //пока не кончится файл, продолжаем цикл
    {
        fgets(str, RAS, fin);          //занисение строки из файла
        kon = strtok(str, " ");         //выделение первой лексемы
        for (i = 0; kon != NULL; i++)     //перенос всех лексем в массив
        {
            b[i] = kon;
            kon = strtok(NULL, " \n");
        }
        sravn(b, i);   //удаление повторяющихся слов
        for (int j = 0; j < i; j++) //переносим все остальные слова в друю строку
        {
            if (b[j][0] != '\0') input += b[j] + ' ';
        }
        cout << input;   //выводимстроку
        input = '\n';
    }
    getchar();
    return 0;
}
 
//Удаление слов с удвоенными согласными
void sravn(tmass b, int i)
{
    char sogl[] = "qwrtypsdfghklzxcvbnm";
    int n = strlen(str);
    for (int i = 0; i < n; i++)
        if (str[i] != ' ')
        {
            int j = i + 1;
            bool fl = true, f = true;
            char simbol;
            while (str[j] != ' ' && fl)
            {
                if (str[j] == str[j - 1]) { fl = false; simbol = str[j]; }
                j++;
            }
            if (!fl)
            {
                for (int k = 0; sogl[k] != '\0' && f; k++)
                    if (sogl[k] == simbol) f = false;
                if (!f)
                {
                    while (str[j] != ' ') j++;
 
                    int len = j - i;
                    for (int k = i; k < n, j < n; k++, j++)
                        str[k] = str[j + 1];
                    n -= len + 1;
                    i += len;
                }
            }
        }
}
Может быть я с типами что-то напутал, у меня с ними всегда проблемы.

Добавлено через 4 минуты
Программа должна искать удвоенные согласные, удалять эти слова, и выводит все обратно
0
335 / 183 / 80
Регистрация: 22.08.2013
Сообщений: 724
11.01.2016, 17:43 6
Цитата Сообщение от frmae14 Посмотреть сообщение
Сидел долго, а сдавать завтра
Проблема в чём?
0
490 / 386 / 184
Регистрация: 08.04.2013
Сообщений: 1,670
11.01.2016, 21:35 7
Попробуй прочтет твой файл?
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
#include <windows.h>
#include <iostream>
#include <fstream>
#include <cstdlib>
 
int main()
{
// setlocale(LC_ALL, "Rus");
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
     std::ifstream in("D:\\Input.txt");
 
     if(!in.is_open())
    {
        std::cout << "Error";
        exit(EXIT_FAILURE);
    }
    std::string str;
    while(in >> str)
    {
           std::cout << str << std::endl;
     }
    in.close();
   system("pause");
    return 0;
}
0
45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
11.01.2016, 21:36 8
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
59
60
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
 
using namespace std;
 
 
int main()
{
    
    const char Soglasnie[] = "bcdfghjklmnpqrstvwxyzBCDFGHJKLNMPQRSTVWXYZ";
 
    ifstream file("c:/test.txt");
    vector <string> Slova;
 
    while (!file.eof()){
        string line;
        getline(file, line);
        
        do {
            int pos_of_razdelitel = line.find_first_of(" ,.\t");
            if (pos_of_razdelitel == string::npos){
                if (line != "") Slova.push_back(line);
                break;
            }
            string slovo = line.substr(0, pos_of_razdelitel);
            if (slovo != "") Slova.push_back(slovo);
            line = line.substr(pos_of_razdelitel+1);
 
        } while (true);
    }
    file.close();
 
    for (int i = 0; i < Slova.size(); i++){
 
        int kolvo_soglasnih = 0;
        int pos = 0;
        do {
            pos = Slova[i].find_first_of(Soglasnie, pos);
            if (pos != string::npos){
                kolvo_soglasnih++;
                pos++;
            }
            else break;
        } while (true);
        
        if (kolvo_soglasnih == 2) cout << Slova[i] << endl;
        
        
    }
 
 
 
 
 
    cout << endl << endl;
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2016, 21:36
Помогаю со студенческими работами здесь

Удалить все слова, начинающиеся с согласных латинских букв, из первого файла и переписать оставшиеся во второй файл
даны 2 файла. В первом текст. Удалить все слова начинающиеся с согласных латинских букв и...

Удалить из каждого третьего слова заданного текста слова все предыдущие вхождения последней буквы
Дана последовательность слов.Напечатать все слова,предварительно преобразив каждое третье по...

Удалить из строки лишние слова таким образом, чтобы оставшиеся слова были упорядочены по алфавиту
Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами...

Вывести на экран все символы заданного слова в обратном порядке
Вывести на экран все символы заданного слова в обратном порядке


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru