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

Замена постфиксной формы инкремента на полную - C++

Восстановить пароль Регистрация
 
TonyPride
2 / 2 / 1
Регистрация: 22.10.2012
Сообщений: 47
25.05.2013, 09:22     Замена постфиксной формы инкремента на полную #1
Нужно скопировать строки из первого файла во второй, заменяя постфиксную форму инкремента/декремента (a++, a--, a+=b, a-=b) на полную (a=a+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
int ispost (char *str)
{
    if (strstr(str, "++")) return 1;
    if (strstr(str, "+=")) return 2;
    if (strstr(str, "--")) return 3; 
    if (strstr(str, "-=")) return 4;
    return 0;
}
 
 
void pref_change (FILE *in, FILE *out)
{
     char str[N], name[N];
     int i=0, j=0, L=0, R=0;
     while(!feof(in))
     {
                     L=0; R=0;
                     fgets (str, N, in );
                     cout<<str<<endl;
                     if (ispost(str)==0) fputs(str, out);
                     else
                     {
                         for(i=0;str[i]!='\0';i++)
                         {
                                      if (str[i]==' ') L=i;
                                      strncpy(name, str+i, 2);
                                      if (ispost(name)==0) fprintf(out, "%c", str[i]);
                                      else
                                      {
                                          R=i;
                                          i=i+2;
                                          strncpy(name, str+L, R-L);
                                          fprintf(out, "=");
                                          for (j=0; name[j]!='\0'; j++) fprintf(out, "%c", name[j]);
                                          switch (ispost(str))
                                          {
                                                 case 1: fprintf(out, "+1");
                                                 case 2: fprintf(out, "+");
                                                 case 3: fprintf(out, "-1");
                                                 case 4: fprintf(out, "-");
                                          }
                                      }
                         }
                     }
                         
                     
     }
}
 
 
int main()
{
    FILE *f1, *f2;
    char s1[N], s2[N];
 f1=fopen("input.txt", "r");
 f2=fopen("output.txt", "w");
 if(f1==NULL or f2==NULL) {cout<<"error"<<endl; getch();}
 else pref_change(f1, f2);
 fclose(f1);
 fclose(f2);
 getch();
}

Содержание input.txt:
Кликните здесь для просмотра всего текста
d=3; a+=5;
*p++;
bbb q->value++;
b=d;

Результат в output.txt:
Кликните здесь для просмотра всего текста
d=3; a= a(+-1-;
*p=*p(+1+-1-
bbb q->value= q->value+1+-1-
b=d;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2013, 09:22     Замена постфиксной формы инкремента на полную
Посмотрите здесь:

Секреты инкремента C++
Преобразовать арифметическое выражение из постфиксной формы в инфиксную C++
C++ Перегрузка операции инкремента
Особенности инкремента C++
C++ Перегрузка постфиксной и префиксной операции инкремента
программа по переводу из постфиксной формы записи в инфиксную с использованием скобок C++
C++ перегрузка постфиксной и префиксной формы оператора ++
Перегрузка инкремента ++ C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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