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

вывод массива указателей String - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 5.00
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
01.02.2010, 23:46     вывод массива указателей String #1
Есть строка str и указатель *string_str на строку типа String
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
 #include <iostream>
 #include <windows.h>
 #include <fstream>
 #include <cstdlib>
 #include <string>
 #include <clocale>
 
 using namespace std;
 int main()
 {
    char* p_str;
    char str[35] = "world in zdc lgh szd"
    streamoff i;
    string *string_str;
 
    p_str = strtok(str, " ");
       string_str = new string [5];
       *string_str = p_str;
       
       for (int i=1; i<5; i++) {
             p_str = strtok('\0', " ");
             *string_str = p_str; 
             cout << *string_str << endl; //Работает
             string_str++;
       }
       
       for (int i=0; i<5; i++) {          
           cout << *string_str[i] << endl; //Неработает
       } 
 }
Как сделать вывод массива строк или произвольного члена массива string_str[], почему неработает
cout << *string_str[i] << endl; или cout << *string_str[4] << endl;?

Добавлено через 2 часа 26 минут
Проблема решилась переприсваиванием указателя на String *string_str
C++
1
2
3
string *b_str;
b_str = string_str;
cout <<  *b_str << endl; //выводит "world"
после этого вывод происходит и цикл не выбивает ошибки
C++
1
2
3
4
for (int i=0; i<5; i++) {          
           cout << *b_str << endl;//выводит "in"
           b_str++;
       }
Только показалось странным что вывод происходит не с первого слова "world" а со второго "in", возникает вопрос - 1. почему указатель сам перемещаеться еще до использования выражения "b_str++;"?

Добавлено через 5 часов 51 минуту
проблема решена
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
 #include <iostream>
 #include <windows.h>
 #include <fstream>
 #include <cstdlib>
 #include <string>
 #include <clocale>
 
 using namespace std;
 int main()
 {
    char* p_str;
    char str[35] = "world in zdc lgh szd"
    streamoff i;
    string* string_str;
    string* b_str, stx;
 
    p_str = strtok(str, " ");
    string_str = new string [5];
    *string_str = p_str;
 
    b_str = string_str;
    stx = *b_str; //используем переменную stx для хранения значения по адресу b_str
       
       for (int i=1; i<5; i++) {
             cout << *b_str << endl; // выводит world
             p_str = strtok('\0', " ");
             *string_str = p_str; // что-то непонятное происходит в этом блоке, значение b_str увеличуеться на 1
             cout << *b_str << endl; // выводит in
             string_str++;
       }
       
       b_str = &stx; //получаем адрес первого слова
       cout << *b_str << endl; //выводит world
 
       system("PAUSE");
       return 0;
 }
Может кто-нибудь сможет объяснить что происходит в блоке
C++
1
2
3
4
5
6
7
        for (int i=1; i<5; i++) {
             cout << *b_str << endl; // выводит world
             p_str = strtok('\0', " ");
             *string_str = p_str; // что-то непонятное происходит в этом блоке, значение b_str увеличуеться на 1
             cout << *b_str << endl; // выводит in
             string_str++;
       }
Почему
C++
1
 *string_str = p_str;
влияет на указатель
C++
1
 *b_str
?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2010, 23:46     вывод массива указателей String
Посмотрите здесь:

C++ осуществить вывод строк из файла используя массив указателей на эти строки.
C++ вектор string в масив указателей на char
C++ Как используя C-String а потом и String class варьировать вывод?
C++ Разыменовывание массива указателей
Вывод букв с помощью указателей (требуется помощь) C++
C++ Вывод контейнера указателей на экземпляры абстрактного класса
Сортировка массива структур через сортировку массива указателей C++
C++ Связь массива и указателей

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 13:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru