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

Копирование строчек по критерию отсутсвия буквы. - C++

Войти
Регистрация
Восстановить пароль
 
Sergey_O
 Аватар для Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
14.12.2009, 00:20     Копирование строчек по критерию отсутсвия буквы. #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
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <iostream>
#include <stdio.h>
using namespace std;
int n1,n2;
 
 
 
struct STROKI{char stroka[26];} stroki[100];
int kolstr; int num=0, num2=0;
 
 
void rus()
 
{
    setlocale( LC_ALL,"Russian" );
}
 
int readfile1()
{
    FILE *file;
    file = fopen("f1.txt", "r+");
    if (file == NULL) return 0;
    for(int i=0; fscanf(file,"%s",&stroki[i].stroka)==1;i++)
    {
        num++;
    }
    
    fclose(file);
    return 1;
}
 
 
 
void printfile1()
{
    for (int i=0;i<num;i++)
    {
        printf ("\n%s",&stroki[i].stroka);
    }
}
int readfile2()
{
    FILE *file2;
    file2 = fopen("f2.txt", "r+");
    if (file2 == NULL) return 0;
    for(int i=0; fscanf(file2,"%s",&stroki[i].stroka)==1;i++)
    {
        num2++;
    }
    
    fclose(file2);
    return 1;
}
 
void printfile2()
{
    for (int i=0;i<num2;i++)
    {
        printf ("\n%s",&stroki[i].stroka);
    }
}
int copy()
{
    FILE *file2;
    file2 = fopen("f2.txt", "w");
    int kol_a;
    char bukva[]="A";
    if (file2 == NULL) return 0;
    for(int i=n1;i<=n2;i++)
    {
        kol_a=0;
        for(int m=0;m<26;m++)
        {
            if(strcmp(&stroki[i].stroka[m],bukva))
            {}
            else kol_a++;
        }
        if (kol_a==0)
        {
              fprintf(file2, "%s\n", &stroki[i].stroka);
              num2++;
        }
    }
    fclose(file2);
    return 1;
}
void zaprosn1n2()
{
    cout << "\nВведите промежуок для рассмотрения строк" << endl;
    cin >> n1 >> n2;
}
//void poisk()
//{
//  char glassnie_a[]="A";
//    char glassnie_o[]="O";
//  char glassnie_e[]="E";
//    char glassnie_i[]="I";
//  int nomer_stroki=0,kol_vo=0;
//  for(int i=0;i<num2;i++)
//      {for(int m=0;m<26;m++)
//              {
//                  if(strcmp(&stroki[i].stroka[m],glassnie_a))
//                         {}
//                 else 
//                        {
//                          kol_vo++;
//                          nomer_stroki=i;
//                          cout << "\n" << kol_vo << " " << nomer_stroki << endl;
//                        }
//                  if(strcmp(&stroki[i].stroka[m],glassnie_o))
//                         {}
//                 else 
//                        {
//                          kol_vo++;
//                          nomer_stroki=i;
//                          cout << "\n" << kol_vo << " " << nomer_stroki << endl;
//                        }
//                  if(strcmp(&stroki[i].stroka[m],glassnie_e))
//                         {}
//                 else 
//                        {
//                          kol_vo++;
//                          nomer_stroki=i;
//                          cout << "\n" << kol_vo << " " << nomer_stroki << endl;
//                        }
//            
//  }
//  }
//  cout << "\n" << nomer_stroki;
//}
 
 
void  main()
{
    rus();
    readfile1();
    printfile1();
    zaprosn1n2();
    copy();
    readfile2();
    printfile2();
    //poisk();
 
}
Суть такая: в функции copy я пытаюсь скопировать все строчки без буквы А в другой файл.
в функции poisk пытаюсь найти строчку с наибольшим числом гласных букв.

проблема, видимо в том, что я неверно задаю условие, возможно неверно определяю переменную, с которой потом сравниваю элементы строки, может что-то ещё. Подозреваю, что проблема в обеих функциях одна и та же.

Буду благодарен за любые подсказки.

Добавлено через 1 час 57 минут
блин, уже все варианты перебрал, которые пришли в голову(((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2009, 00:20     Копирование строчек по критерию отсутсвия буквы.
Посмотрите здесь:

Обмен строчек в матрице C++
C++ Программа для склеивания строчек
C++ Промежуток между написанием строчек
C++ Отсортируйте строки таблицы в первую очередь по первому критерию, при равенстве по первому критерию, отсортируйте по второму
C++ Функция, удаляющая элементы массива по критерию
Поясните пару строчек C++
C++ Матрица, сумма строчек
C++ Подсчет строчек в файле
Функция поиска по определенному критерию в стеке C++
C++ Какое предназначание каждой из строчек
Некорректное отображение строчек анкеты C++ C++
C++ Разбор строчек небольшого кода

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,642
Записей в блоге: 1
14.12.2009, 00:52     Копирование строчек по критерию отсутсвия буквы. #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
#include <iostream>
 
bool if_a(char a){
    return a != 'a';
}
typedef bool (*func)(char);
 
void copy_if(const char *begin, const char *end, char *out, func f){
    for(; begin != end; ++begin){
        if(f(*begin))
            *out++ = *begin;
    }
    *out = '\0';
}
int main(){
    const char *str[] = {"laine 1a",
                         "liane 2aa",
                         "alaianaea 3aa"};
    char o_str[3][20];
 
    copy_if(str[0], str[0] + strlen(str[0]), o_str[0], if_a);
    copy_if(str[1], str[1] + strlen(str[1]), o_str[1], if_a);
    copy_if(str[2], str[2] + strlen(str[2]), o_str[2], if_a);
 
    std::cout << o_str[0] << std::endl;
    std::cout << o_str[1] << std::endl;
    std::cout << o_str[2] << std::endl;
 
    return 0;
}
в str - допустим записали данные из файла..
в o_str - поместили модифицированные строки.. потом записывайте заново в файл.
Sergey_O
 Аватар для Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
14.12.2009, 01:05  [ТС]     Копирование строчек по критерию отсутсвия буквы. #3
Цитата Сообщение от ISergey Посмотреть сообщение
Конкретно в чем проблема вы так и не сказали..
Если не можете скопировать все строчки без буквы А то вот..
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
#include <iostream>
 
bool if_a(char a){
    return a != 'a';
}
typedef bool (*func)(char);
 
void copy_if(const char *begin, const char *end, char *out, func f){
    for(; begin != end; ++begin){
        if(f(*begin))
            *out++ = *begin;
    }
    *out = '\0';
}
int main(){
    const char *str[] = {"laine 1a",
                         "liane 2aa",
                         "alaianaea 3aa"};
    char o_str[3][20];
 
    copy_if(str[0], str[0] + strlen(str[0]), o_str[0], if_a);
    copy_if(str[1], str[1] + strlen(str[1]), o_str[1], if_a);
    copy_if(str[2], str[2] + strlen(str[2]), o_str[2], if_a);
 
    std::cout << o_str[0] << std::endl;
    std::cout << o_str[1] << std::endl;
    std::cout << o_str[2] << std::endl;
 
    return 0;
}
в str - допустим записали данные из файла..
в o_str - поместили модифицированные строки.. потом записывайте заново в файл.
да, проблема именно в том, что не получается скопировать строчки без буквы А.
за код огромное спасибо, но можно ещё глянуть, в чём у меня ошибка?
Yandex
Объявления
14.12.2009, 01:05     Копирование строчек по критерию отсутсвия буквы.
Ответ Создать тему
Опции темы

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