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

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

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

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

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

Запись вектора строк в массив указателей на тип char - C++
Решаю задачу 4.34 из книги Липпмана С. Язык программирования С++. Вводный курс. 4-е изд. Задание: 1) Напишите программу, читающую...

Массив указателей на массив строк и сортировка массива указателей - C++
Добрый день. Поступил вопрос. Есть задача. У нас встроенный массив char mass;.Мы вводим строки до тех пор, пока не будет заполнен массив...

Массив строк как массив указателей на массивы чаров - C++
Я всё правильно сделал? char* Files; Files = &quot;AHEAD&quot;; Files = &quot;LEFT&quot;; Files = &quot;RIGHT&quot;; Files = NULL; int searchFile()...

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

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

Вектор строк и массив указателей на тип char - C++
Помогите, пожалуйста, с одной задачей. Сижу голову ломаю. Никак не могу понять почему эта ошибка выскакивает. Напишите программу,...

28
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,804
Записей в блоге: 3
Завершенные тесты: 1
11.05.2013, 08:36 #16
Хотите gets поставьте
Просто не хорошо мешать ввод/вывод C и C++
1
Олексей
5 / 4 / 0
Регистрация: 05.04.2010
Сообщений: 259
11.05.2013, 08:44  [ТС] #17
Спасибо, вот и я так думаю, но учебник шилда по с++ рассказывает что мне надо использовать gets() , в общем не столь важно, ещё вопрос, можно ли каким то ещё способом игнорировать то тот самый символ конца строки?
и ещё как я понял в типе данных string нету того самого символа конца строки что не вызывает таких проблем с повторным считыванием так? просто я прочитал что тип данных стринг как бы есть и как бы хорош но для пользования чем то опасен и мол лучше по страинке
0
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,804
Записей в блоге: 3
Завершенные тесты: 1
11.05.2013, 09:44 #18
Цитата Сообщение от Олексей Посмотреть сообщение
как бы хорош но для пользования чем то опасен и мол лучше по страинке
Как раз таки наоборот

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

Цитата Сообщение от Олексей Посмотреть сообщение
и ещё как я понял в типе данных string нету того самого символа конца строки что не вызывает таких проблем
Под символом конца строки я имел ввиду '\n', а не нуль-терминатор '\0'
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);
        }
    }
0
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,804
Записей в блоге: 3
Завершенные тесты: 1
11.05.2013, 15:47 #20
C++
1
p=strstr(p+1,d);
1
_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;
};
0
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,804
Записей в блоге: 3
Завершенные тесты: 1
11.05.2013, 16:12 #22

Не по теме:

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


count должен быть константой времени компиляции
0
Олексей
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;
}
При попытке освободить память вылетает ошибка?
0
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,804
Записей в блоге: 3
Завершенные тесты: 1
11.05.2013, 18:24 #24
Цитата Сообщение от Олексей Посмотреть сообщение
При попытке освободить память вылетает ошибка?
собственно что Вы пытаетесь освободить?
C++
1
delete p;
0
Олексей
5 / 4 / 0
Регистрация: 05.04.2010
Сообщений: 259
11.05.2013, 18:25  [ТС] #25
да вот и из-за delete p; выкидывает ошибку
0
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,804
Записей в блоге: 3
Завершенные тесты: 1
11.05.2013, 18:27 #26
Вы выделяли память только под "матрицу". Её и нужно освобождать:
C++
1
2
3
for(int i=0;i<n;++i)
    delete [] gruppa[i];
delete [] gruppa;
0
Олексей
5 / 4 / 0
Регистрация: 05.04.2010
Сообщений: 259
11.05.2013, 18:31  [ТС] #27
упс
0
_Mutex
Заблокирован
18.05.2013, 18:24 #28
Цитата Сообщение от Croessmah Посмотреть сообщение

Не по теме:

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


count должен быть константой времени компиляции
И? ... А еще что должно быть?. Это достоинство с99.
Когда я делаю ответ, меня не интересует нравится он тебе или нет, если не нравится не смотри.
Я тебе ничего не должен, так что советы свои оставь себе.
0
Croessmah
18.05.2013, 18:36     Ввод строк и запись их в массив указателей
  #29

Не по теме:

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

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

Как правильно создать двумерный массив указателей с использованием calloc? и ввод данных в него - C++
Как правильно создать двумерный массив указателей с использованием calloc и ввести в него данные?

Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже --> - C++
Слова английского текста рассортировать по возрастанию количества заданной буквы в слове. Слова с одинаковым количеством такой буквы...

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

Ввод нескольких строк или массив строк - C++
У меня есть массив строк. Нужно ввести несколько строк, но не получается. Вот код: int main() { const int n=4; const int...


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

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

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