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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.71
Олексей
5 / 4 / 0
Регистрация: 05.04.2010
Сообщений: 259
#1

Ввод строк и запись их в массив указателей - C++

11.05.2013, 05:22. Просмотров 3317. Ответов 28
Метки нет (Все метки)

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

C++
1
2
3
4
    int n;
    cin>>n;
    char **gruppa=new char*[n];
    char *s=new char [];
дальше как не пробовал или считывает до бесконечно или ошибку выдаёт, пробовал сделать циклом где условие считывать пока i < strlen(s); и если я даже считаю первую строчку как мне заставить его после нажатия на enter разрешить мне вводить ещё строчку опять её считывать. cin.getline(s,100) - как я понял берёт уже введённую строчку, а у меня после ввода колечества слов и нажатия на ентер выкидывает с ошибкой
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2013, 05:22     Ввод строк и запись их в массив указателей
Посмотрите здесь:
Запись вектора строк в массив указателей на тип char C++
C++ Массив указателей на массив строк и сортировка массива указателей
Массив строк как массив указателей на массивы чаров C++
Запись и чтение массива указателей в двумерный массив C++
C++ Сформировать массив указателей на матрицу строк
Вектор строк и массив указателей на тип char C++
Как правильно создать двумерный массив указателей с использованием calloc? и ввод данных в него C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,064
Записей в блоге: 3
Завершенные тесты: 1
11.05.2013, 08:36     Ввод строк и запись их в массив указателей #16
Хотите gets поставьте
Просто не хорошо мешать ввод/вывод C и C++
Олексей
5 / 4 / 0
Регистрация: 05.04.2010
Сообщений: 259
11.05.2013, 08:44  [ТС]     Ввод строк и запись их в массив указателей #17
Спасибо, вот и я так думаю, но учебник шилда по с++ рассказывает что мне надо использовать gets() , в общем не столь важно, ещё вопрос, можно ли каким то ещё способом игнорировать то тот самый символ конца строки?
и ещё как я понял в типе данных string нету того самого символа конца строки что не вызывает таких проблем с повторным считыванием так? просто я прочитал что тип данных стринг как бы есть и как бы хорош но для пользования чем то опасен и мол лучше по страинке
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,064
Записей в блоге: 3
Завершенные тесты: 1
11.05.2013, 09:44     Ввод строк и запись их в массив указателей #18
Цитата Сообщение от Олексей Посмотреть сообщение
как бы хорош но для пользования чем то опасен и мол лучше по страинке
Как раз таки наоборот

Цитата Сообщение от Олексей Посмотреть сообщение
каким то ещё способом игнорировать то тот самый символ конца строки?
считывать cin.get'ом весь мусор

Цитата Сообщение от Олексей Посмотреть сообщение
и ещё как я понял в типе данных string нету того самого символа конца строки что не вызывает таких проблем
Под символом конца строки я имел ввиду '\n', а не нуль-терминатор '\0'
Олексей
5 / 4 / 0
Регистрация: 05.04.2010
Сообщений: 259
11.05.2013, 14:41  [ТС]     Ввод строк и запись их в массив указателей #19
Вот ещё вопрос, просто что бы не создавать новую тему. Цикл почему то не завершается
C++
1
2
3
4
5
6
7
8
9
10
11
char *d, *d2;
 
    for (int i=0; i<n; i++){
        d=gruppa[i]+1;
        char *p=strstr(text, d);
        while(p!=NULL){
            d2=p-1;
        *d2=*d2-'а'+'А';
        p=strstr(p, d);
        }
    }
а если так то работает, только делает не совсем то что надо.

C++
1
2
3
4
5
6
7
8
9
10
char *d;
 
    for (int i=0; i<n; i++){
        d=gruppa[i]+1;
        char *p=strstr(text, d);
        while(p!=NULL){
        *p=*p-'а'+'А';
        p=strstr(p, d);
        }
    }
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,064
Записей в блоге: 3
Завершенные тесты: 1
11.05.2013, 15:47     Ввод строк и запись их в массив указателей #20
C++
1
p=strstr(p+1,d);
_Mutex
Заблокирован
11.05.2013, 16:08     Ввод строк и запись их в массив указателей #21
Ввод строк и запись их в массив указателей
C++
1
2
3
4
5
6
int main(){
    int count=(cin>>count,count);
    string * result[count],str;
    for(int i=0;i<count;i++)result[i]=new string((cin>>str,str));
    return 0;
};
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,064
Записей в блоге: 3
Завершенные тесты: 1
11.05.2013, 16:12     Ввод строк и запись их в массив указателей #22

Не по теме:

C++
1
string * result[count]
Такое объявление массива является нестандартным расширением GNU - VLA


count должен быть константой времени компиляции
Олексей
5 / 4 / 0
Регистрация: 05.04.2010
Сообщений: 259
11.05.2013, 16:28  [ТС]     Ввод строк и запись их в массив указателей #23
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
#include<iostream>
#include<string.h>
#include<windows.h>
 
using namespace std;
 
 
int main () {
 
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
 
    int n;
    char str[1024];
    char text[1024];
    cout<<"Введите количество студентов в группе: ";
    cin>>n;
    cin.ignore(cin.rdbuf()->in_avail());
    char **gruppa=new char* [n];
 
    for(int i=0; i<n; i++){
        cout<<i+1<<". ";
    cin.getline(str, 1024);
    gruppa[i]=new char [strlen(str)+1];
    strcpy(gruppa[i], str);
    }
 
    cout<<"Ведите предложение: "<<endl;
 
    cin.ignore(cin.rdbuf()->in_avail());
    cin.getline(text,1024);
 
    
    char *p=strpbrk(text,".?!");
    while(p!=NULL){
         p+=2;
         if ((*p>='a')&&(*p<='я')){
             *p=*p-'а'+'А';}
        p=strpbrk(p, ".!?");
    }
 
 
    for (int i=0; i<n; i++){
        char *p=strstr(text, gruppa[i]);
        while(p!=NULL){
            if ((*p>='a')&&(*p<='я'))
            {*p=*p-'а'+'А';}
        p=strstr(p+1, gruppa[i]);
        }
    }
 
    p=&text[0];
    if ((*p>='a')&&(*p<='я')){
        *p=*p-'а'+'А';}
cout<<text<<endl;
delete p;
    return 0;
}
При попытке освободить память вылетает ошибка?
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,064
Записей в блоге: 3
Завершенные тесты: 1
11.05.2013, 18:24     Ввод строк и запись их в массив указателей #24
Цитата Сообщение от Олексей Посмотреть сообщение
При попытке освободить память вылетает ошибка?
собственно что Вы пытаетесь освободить?
C++
1
delete p;
Олексей
5 / 4 / 0
Регистрация: 05.04.2010
Сообщений: 259
11.05.2013, 18:25  [ТС]     Ввод строк и запись их в массив указателей #25
да вот и из-за delete p; выкидывает ошибку
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,064
Записей в блоге: 3
Завершенные тесты: 1
11.05.2013, 18:27     Ввод строк и запись их в массив указателей #26
Вы выделяли память только под "матрицу". Её и нужно освобождать:
C++
1
2
3
for(int i=0;i<n;++i)
    delete [] gruppa[i];
delete [] gruppa;
Олексей
5 / 4 / 0
Регистрация: 05.04.2010
Сообщений: 259
11.05.2013, 18:31  [ТС]     Ввод строк и запись их в массив указателей #27
упс
_Mutex
Заблокирован
18.05.2013, 18:24     Ввод строк и запись их в массив указателей #28
Цитата Сообщение от Croessmah Посмотреть сообщение

Не по теме:

C++
1
string * result[count]
Такое объявление массива является нестандартным расширением GNU - VLA


count должен быть константой времени компиляции
И? ... А еще что должно быть?. Это достоинство с99.
Когда я делаю ответ, меня не интересует нравится он тебе или нет, если не нравится не смотри.
Я тебе ничего не должен, так что советы свои оставь себе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2013, 18:36     Ввод строк и запись их в массив указателей
Еще ссылки по теме:
C++ Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже -->
C++ создать статический массив строк как статический массив указателей на строки, задание ниже -->
C++ Ввод нескольких строк или массив строк
C++ Cоздать и заполнить массив строк в стиле Си (квадратную матрицу указателей на char)
C++ Осуществить вывод строк из файла, используя массив указателей на эти строки

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

Или воспользуйтесь поиском по форуму:
Croessmah
18.05.2013, 18:36     Ввод строк и запись их в массив указателей
  #29

Не по теме:

Вот именно, что C, а не C++
В Си++ такое действие не законно.

Yandex
Объявления
18.05.2013, 18:36     Ввод строк и запись их в массив указателей
Ответ Создать тему
Опции темы

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