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

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

Войти
Регистрация
Восстановить пароль
 
TonyPride
2 / 2 / 1
Регистрация: 22.10.2012
Сообщений: 47
#1

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

25.05.2013, 09:22. Просмотров 242. Ответов 0
Метки нет (Все метки)

Нужно скопировать строки из первого файла во второй, заменяя постфиксную форму инкремента/декремента (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;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2013, 09:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Замена постфиксной формы инкремента на полную (C++):

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

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

Преобразовать арифметическое выражение из постфиксной формы в инфиксную - C++
У меня задача: преобразовать арифметическое выражение из переменных, знаков арифметическич операций и круглых скобок из постфиксной формы в...

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

Секреты инкремента - C++
Пожалуйста!!! помогите! Умоляю!:help: i=5; j=(++i) + (++i): Чему равно j?; пожалуйста обьясните как это решается, ну или...

Перегрузка инкремента - C++
Допустим, что некий класс имеет в наличии методы пре(и пост-)фиксного инкрементов. Date&amp; Date::operator++(); Date...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2013, 09:22
Привет! Вот еще темы с ответами:

Особенности инкремента - C++
Здравствуйте!Возник вопрос касательно операции инкремента(++) допутим у нас есть код #include &lt;iostream&gt; int main() { ...

Перегрузка инкремента ++ - C++
Не понимаю как вызвать перегрузку инкремента: void operator ++( int m ); в функции main,какой синтаксис. Я в main циклично ввожу числа и...

Отличие постфиксной и префиксной формы декрементирования при работе с массивами - C (СИ)
Здравствуйте. Есть код, который работает(префиксная форма): #include &lt;stdio.h&gt; int main(void){ int mas;

программа по переводу из постфиксной формы записи в инфиксную с использованием скобок - C (СИ)
c проверкой на правильность ввода, записанная в буквенном виде


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

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

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