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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Вопрос про указатели http://www.cyberforum.ru/cpp-beginners/thread91616.html
char *a = "s"; 1. Выделяется место в памяти 2. В это место записывается s 3. Указателю a приваивают адрес памяти где храниться s так? а почему нельзя вот так int *a = 5;
C++ матрицы... даны две целочисленные квадратные матрицы порядка 6,найти последовательность из нулей и единиц,b1....b6,такую что b1=1 когда все элементы і-й строки первой матрицы больше соответствующих элементов і-й строки второй матрицы http://www.cyberforum.ru/cpp-beginners/thread91611.html
C++ Анализ массива
Здравствуйте, программисты. Помогите решить задачу: "Написать программу, которая вводит значения элементов целочисленного массива, анализирует их и выводит на экран те элементы, которые встречаются в массиве только один раз." Половину написал, вот набросок: #include <cstdlib> #include <iostream> using namespace std; int main() {int n=10;
C++ программа на C++
Добрые люди помогите решить задачу! Написать программу, которая выдает все возможные перестановки симво- лов пятисимвольной строки, вводимой с клавиатуры. заранее благодарен всем откликнувшимся!!! Добавлено через 5 часов 15 минут что нет добрых людей, готовых помочь студенту?????
C++ Дано предложение. Вывести все различные слова http://www.cyberforum.ru/cpp-beginners/thread91597.html
Дано предложение. Вывести все различные слова.Помогите пожалуста:)))))Надо решить в Си!
C++ Цветные символы в консоли. Уважаемые, подскажите как сделать символы в консоли цветными. IDE - VStudio 2008. подробнее

Показать сообщение отдельно
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
01.02.2010, 23:46     вывод массива указателей String
Есть строка 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
?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 05:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru