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

размер считываемой строки из файла - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Калькулятор и стек http://www.cyberforum.ru/cpp-beginners/thread980842.html
Решил опробовать себя в С++. В Visual Studio C++ решил сделать мини калькулятор, который выполняет подсчет через стек. Причем парсит скобки дабы в них подсчитать в начале и только потом подсчитать все остальное. Реально реализовать такое? Подскажите, в какую сторону копать в плане стека и регулярки для скобок. Буду очень благодарен!
C++ Сортировка двоичным включением У меня задание продемонстрировать в виде таблицы алгоритм роботы сортировки с двоичным включением на массиве 15,4,10,8,6,9,16,1.Написал программу,н оона раюотает неправильно.В чём ошибка? #include <iostream> #include <conio.h> using namespace std; void main() { int i,j,a,n,l,z,m,S,t,k; cout<<"Input n"; cin>>n; http://www.cyberforum.ru/cpp-beginners/thread980829.html
параллельное программирование C++
Подскажите, пожалуйста! Возвожу положительные числа в степень, а выдается отрицательный результат. Как быть? #include <iostream> #include <stdio.h> #include <stdlib.h> #include <mpi.h> using namespace std;
C++ Рандомизация ответов
Возникли некоторые проблемы, не знаю как сделать рандом ответов в тестирование, да так чтобы не потерять правильный ответ. Буду очень рад примерам.
C++ Что здесь не так? http://www.cyberforum.ru/cpp-beginners/thread980809.html
Только начал изучать С++. Решил написать программу которая гласит что число больше или меньше ста и парное оно или непарное. За код строго не судите(только учусь)! Компилятор-MS Visual C++ Express 2010#include<iostream> #include<math.h> using namespace std; int main() { setlocale(LC_ALL, "russian"); int peremenaya; cin>>peremenaya; int a=peremenaya/2; if (peremenaya<100) {
C++ Не открыть файл! 2 месяца назад все работало... Сейчас при отладке доходит до открытия файла на чтение и вылетает... Права доступа открыл какие только есть... С путями, кажется(?), все нормально... Дайте намек, как разгадать эту загадку. подробнее

Показать сообщение отдельно
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,997
19.10.2013, 01:01  [ТС]
спасибо, я попробую разобраться в вашем коде попозже, я вот свой накатал, но там в конце неувязка

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
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
const int n=200;//размер буфера
int c; // счетчик для кол-ва символов в строке
int i=0; // счетчик кол-ва строк
 
ifstream file; // создаем объект  file
file.open("text.txt"); // привязываем file к имени файла и открываем
while(!file.eof()) // цикл для чтения из файла до его конца, считаем кол-во строк
{
char* a=new char[n]; // создаем буфер для считывания в него файла
file.getline(a,n);   // считываем туда строку до символа '\0' по умолчанию
delete []a;         // очищаем буфер
i++;                //увеличиваем счётчик кол-ва строк
}
file.close();       // закрываем файл, т.к. прочитать его снова с 1ой строки иначе я не знаю как
file.open("text.txt");  //открываем его снова
char** b=new char*[i];  // массив для хранения массивов со строками
i=0;                    // обнуляем счётчик для заполнения массива b
while(!file.eof())          // цыкл цыкл мотоцикл:D
{
c=0;                   // счётчик для подсчёта символов
char* a=new char[n];  // буфер
file.getline(a,n);      // снова читаем в буфер файл
    while (a[c]!='\0')  //подсчитываем символы до конца строки
    {
    c++;            //итерация
    }
cout<<"\nc="<<c<<"  "; //просто контролируем результат
char* d=new char[c+1];  //выделяем память под массив хранящий символы
d[c+1]='\0';        // записываем конец строки
    for (int j=0;j<=c;j++)   // в цикле посимвольно записываем в наш массив буфер а[]
    {
    d[j]=a[j];
    cout<<d[j];     // контролим что получилось
    }
b[i]=&d[0];       // присваиваем главному массиву адреса массивов с символами
cout<<"i="<<i<<endl;    // контролим кол-во строк
delete []a;     // чистим буфер
i++;          // итерация строки
}
cout<<"\n"<<endl;
 
 
int k;
for (int j=0;j<=i;j++) // выводи главный массив со стркоами
    {
    k=0;
 
// и вот начиная с этого цикла у меня пошёл треш в голове
//...я не понимаю почему в while надо обращатсья к массиву без разыменовывания, т.е. *
// ,а в if уже обязательно через *, иначе цикл не находит \eof, если подставить в while \eof
// то компилятор не компилит, + ко всему к этому пробелы в ифе он тоже не видит
// вообщем я не понимаю... если обращаюсь к массиву через cout<<(b[j]+k) б ,без *, то получаю на экране строку, а не адерс этой строки
// если обращаюсб через * то получаю уже символ... почему if while так непонятно работают...
// вообщем где-то косяк, но я не понимаю где, т.к.  не очень представляю char **b=new char*[];
// это как указатель на указатель 1ого элемента массива, в котором хранятся указатели на 1ый элемент других массивов...
        while ((b[j]+k)!='\0')
        {
        cout<<(b[j]+k)<<"   ";
        *(b[j])=' ';
        if (*(b[j]+k)==' ') // пробелы игнорируются
            *(b[j]+k)=' ';
        if ((*b[j]+k)!='\eof')
        break;
        k++;
        }
 
    }
 
cout<<endl;
for (int j=0;j<=i;j++)
cout<<(b[j])<<endl;
delete [] b;            // чистим его, хотя он итак удалится
file.close();       // закрываем файл
return 0;
}
вспомнил, что вроде массив char'ов в cout выводится весь, если обратиться к его 1ому элементу...хотя мб ошибаюсь
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru