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

Вопрос о строке - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Подсчет количества обменов и сравнений в алгоритмах сортировки http://www.cyberforum.ru/cpp-beginners/thread167879.html
Помогите как в алгоритмах сортировки: простыми включениями (простой вставкой),методом пузырька определить - определение числа сравнений; - определение числа обменов; - определение суммы обменов и сравнений; Если можно напишите код .Заранее благодарен... Дуляж тем запрещен правилами форума (п. 3.4). Не плодите одинаковые темы!
C++ Составить программу "Телефонный справочник" Составить программу "Телефонный справочник", которая имеет меню: 1 Добавление 2 Поиск 3 Завершение работы Команда "Добавление" дописывает в файл имя, фамилию и номер телефона абонента. Если файла на диске нет, то программа должна создать его. В файле информация о каждом абоненте находится в отдельной строке. Команда "Поиск" должна запрашивать фамилию человека и выводить его телефон.... http://www.cyberforum.ru/cpp-beginners/thread167858.html
Динамический объект не содержит в себе линамических членов. Удалять ли его? C++
Собственно в теме весь вопрос) Непонятно, нужно ли вызывать delete для динамического объекта если его деструктор пустой так как все его члены принадлежат к автоматическому классу хранения.
ввод n-значного числа, вывод цифр, из которых оно состоит и вывод суммы его цифр. C++
Написать программу, осуществляющую ввод n-значного числа, вывод цифр, из которых оно состоит и вывод суммы его цифр. Подключить стандартные библиотеки (библиотека стандартного ввода-вывода <stdio.h>, библиотека потокового ввода-вывода <ios-tream.h>, библиотека функций управления текстовым экраном <conio.h>, библиотека математических функций <math.h>, библиоте-ка стандартных функций <stdlib.h>).
C++ Вывести случайный элемент массива со значением 1 http://www.cyberforum.ru/cpp-beginners/thread167803.html
Такая штука: нужно вывести рандомный элемент массива, значение которого = 1. Ищу для этого в цикле рандомные значения строки/столбца и сравниваю элемент с 1. Естественно это плохо, т.к. с помощью rand() постоянно выводятся повторяющиеся значения, и для обработки, например, массива 100x100 может случится до 40.000 проходов. Вот код: int main() { #include <iostream.h> const int n...
C++ На сколько дней студенту хватит стипендии S, если он тратит N руб. в день и его расходы увеличиваются в X раз? На сколько дней студенту хватит стипендии S, если он тратит N р. в день и его расходы каждый день увеличиваются в X раз? подробнее

Показать сообщение отдельно
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
21.09.2010, 23:53  [ТС]     Вопрос о строке
Странно, работает, но при вставке strcpy() getline() виснет.
Про танцы: это так сказать центровка
C++
1
2
3
4
5
6
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
 
#include "omNum.h"
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
// lr1.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
 
 
int main(int argc, char* argv[])
{
    char str [80];
 
    cout.width(strlen("Examples of expressions:")/2 + 40);
    cout<<"Examples of expressions:"<<endl;
    cout.width(strlen("2+3i")/2 + 40);
    cout<<"2+3i"<<endl;
    cout.width(strlen("2") + 40);
    cout<<2<<endl; 
    cout.width(strlen("0i")/2 + 40);
    cout<<"0i"<<endl;
    cout.width(strlen("2-1i")/2 + 40);
    cout<<"2-1i"<<endl;
    
    cout<<"Enter the 1st expression: ";
    cin.getline(str,79);
    ComNum num_1(str);
 
    cout<<"Enter the 2d expression: ";
    cin.getline(str,79);
    ComNum num_2(str);
 
    ComNum o;
 
    o = num_1 + num_2;
    o.Show();
 
    o = num_1 - num_2;
    o.Show();
 
    o = num_1 * num_2;
    o.Show();
 
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class ComNum  
{
    double Im, Rl;
    int len;
public:
    ComNum()
    {
        Im = 0.0;
        Rl = 0.0;
    }
    ComNum(char[]);
    virtual ~ComNum() {}
    ComNum operator+(ComNum&);
    ComNum operator-(ComNum&);
    ComNum operator*(ComNum&);
    void Show();
};
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
// omNum.cpp: implementation of the ComNum class.
//
//////////////////////////////////////////////////////////////////////
 
#include "stdafx.h"
#include "omNum.h"
 
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
 
ComNum::ComNum(char str[])
{
    len = strlen(str) - 1;
    int i = 0, k = 0;
    bool flag = true;
    char *s;
    
    ////////////exceptions////////////
    try
    {
        while (isdigit(*(str+i)) || *(str+i) == 'i' || *(str+i) == '-' || *(str+i) == '+')
            i++;
        if (i != len+1 || !str)
            throw 0;
    }
    catch(int)
    {
        MessageBox(HWND_DESKTOP,"You've entered a wrong expression!","Attention!",MB_OK|MB_ICONERROR);
        exit(1);    
    }
 
    i = 0;
    while(str[i] != '\0')
    {    
        if (str[i] == '+')
            break;
        else 
            if(str[i] == '-')    
            {
                flag = false;
                break;
            }
        str[i];
        i++;
    }
 
    ///not full-fledged number///
    if((unsigned)i == strlen(str)) // number consists from either im or real part
    {
        i = 0;
        do
        {
            if (str[k] == 'i')
                break;
            *(str+k);
            i++;
        }while(str[k++] != '\0');
 
        if((unsigned)i != strlen(str)) // number consits only from im part
            Rl = 0.0; 
        else
            Im = 0.0; // number consits only from real part
    
    
        if (Rl == 0.0)
        {
             s = new char [k+1];
             if (!s)
             {
                 MessageBox(HWND_DESKTOP, "Memory allocation error!", "Warning!", MB_OK|MB_ICONERROR);
                 exit(1);
             }
 
            for (i = 0; i < k+1; i++)
                s[i] = str[i];
            if (!flag)
                Im = -atof(s);
 
            delete [] s;
        }
        else
            Rl = atof(str);
    }
    /////////////////////////////
 
 
 
    ///full-fledged number///
    k = 0;
 
    for (i = len; i >= 0; i--)
    {
        if (str[i-1] == '+' || str[i-1] == '-')
        {
            int tmp = i;
            s = new char [len-i]; // len - 1 -> 'i' - eliminated 
            if (!s)
             {
                 MessageBox(HWND_DESKTOP, "Memory allocation error!", "Warning!", MB_OK|MB_ICONERROR);
                 exit(1);
             }
            
            while (str[i] != 'i')
                s [k++] = str[i++];
            if (!flag)
                Im = -atof(s);
            else
                Im = atof(s);
            delete [] s;
 
            s = new char [tmp];
            if (!s)
             {
                 MessageBox(HWND_DESKTOP, "Memory allocation error!", "Warning!", MB_OK|MB_ICONERROR);
                 exit(1);
             }
            for (i = 0; i < tmp; i++)
                s [i] = str[i];
            Rl = atof(s);
            delete [] s;
        }
    }
    ///////////////////////// 
}
 
ComNum ComNum::operator +(ComNum& ob)
{
    ComNum tmp;
 
    tmp.Rl = Rl + ob.Rl;
    tmp.Im = Im + ob.Im;
    
    return tmp;
}
 
ComNum ComNum::operator -(ComNum& ob)
{
    ComNum tmp;
 
    tmp.Rl = Rl - ob.Rl;
    tmp.Im = Im - ob.Im;
    
    return tmp;
}
 
ComNum ComNum::operator *(ComNum& ob)
{
    ComNum tmp;
    
    tmp.Rl = Rl*ob.Rl - Im*ob.Im;
    tmp.Im = Rl*ob.Im + ob.Rl*Im;
    
    return tmp;
}
 
void ComNum::Show()
{
    cout<<"Result of chosen operation: "<<Rl<<" + "<<Im<<"i"<<endl;
}
 
Текущее время: 13:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru