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

Вывод букв с помощью указателей (требуется помощь) - C++

Восстановить пароль Регистрация
 
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
29.06.2013, 11:03     Вывод букв с помощью указателей (требуется помощь) #1
Есть программа которая считывает слова из файла input.txt до тех пор пока они не закончатся. Я хочу в массив address помещать указатель на первую букву каждого слова, а в массив word_leng записывать длину слова. После считывания всех слов, зная указатель на каждое первое слово и длину каждого слова, вывести их. Как правильно создать указатель на первую букву каждого слово и как правильно потом организовать вывод слов, т.е как выводить сами буквы на которые указывают указатели, а не сами указатели, подскажите пожалуйста.
Вот код:
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
#include<iostream>
#include<fstream>
 
using namespace std;
int main()
{
    ifstream cin("input.txt");
    int address[100],word_leng[100],i=0,number,j;
    string str;
    while(cin>>str)
    {
        word_leng[i]=str.length();
        address[i]&=str[0];//берем адресс str[0] error
        //cout<<char(address[i])<<endl;
        i++;
    }
    for(number=0;number<i;number++)
    {
        for(j=0;j<=word_leng[number];j++)
        {
            cout<<word_leng[number];// вывод error
        }
        cout<<endl;
    }
    return 0;
}
P.S. Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
FarStar
Заблокирован
29.06.2013, 13:11     Вывод букв с помощью указателей (требуется помощь) #2
бредовий идеи я не видел. А не проще все слова в вектор засовывать и когда заблагорассудится их оттуда доставать?
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
include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::fstream fs("data.txt", std::ios::in);
    std::vector<std::string> words;
    if(fs.is_open())
    {       
        while(!fs.eof())
        {
            std::string str;
            fs >> str;
            words.push_back(str);
        }
        fs.close();
    }
    
    for(auto it=words.begin();it != words.end();it++)
    {
        std::cout << it->c_str() << std::endl;
    }
 
    return 0;
}
Добавлено через 13 минут
ну а если тебе нужны адреса и длины , можешь немного модифицировать последний цикл, типа того
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::fstream fs("data.txt", std::ios::in);
    std::vector<std::string> words;
    if(fs.is_open())
    {       
        while(!fs.eof())
        {
            std::string str;
            fs >> str;
            words.push_back(str);
        }
    }
    
    for(auto it=words.begin();it != words.end();it++)
    {
        std::cout << it->c_str() << std::endl;
        std::cout << "FIRST LETTER ADRESS: " << &it[0] << " LENGHT: " << it->size() << std::endl;
    }
 
    return 0;
}
Добавлено через 2 минуты
ну а если ты хочешь при открытие файла считать только одно конкретное слово оттуда, тебе надо не указатели искать, а кол-во исмволов (char-ов) до этого слова и его длинну
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
29.06.2013, 13:20     Вывод букв с помощью указателей (требуется помощь) #3
@Nikko12, идея хоть и бред, но ее можно реализовать примерно так:
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
#include <iostream>
#include <fstream>
#include <vector>
#include <utility>
#include <iterator>
 
using namespace std;
 
int main()
{
    ifstream file("input.txt");
    istreambuf_iterator<char> it( file ), it2( file ), eos;
    vector<pair<istreambuf_iterator<char>, int>> v;
 
    while ( it2 != eos ) {
        while ( it2 != eos && isspace(*it2) ) ++it2;
 
        it = it2;
 
        int count = 1;
 
        while ( ++it2 != eos && !isspace(*it2) ) ++count;
 
        if (it != eos)
            v.push_back( {it, count} );
    }
 
    for (auto p : v)
        cout << *p.first << " - " << p.second << endl;
    file.close();
    return 0;
}
Но лучше будет считать все слова в вектор:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <fstream>
#include <vector>
#include <utility>
#include <iterator>
#include <memory>
 
using namespace std;
 
int main()
{
    vector<string> vec( istream_iterator<string>(
                                *unique_ptr<ifstream>(new ifstream( "input.txt" )) ),
                        ( istream_iterator<string>() ) );
    for (const auto &x : vec) cout << x << " - " << x.size() << endl;
    return 0;
}
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
29.06.2013, 13:24  [ТС]     Вывод букв с помощью указателей (требуется помощь) #4
@FarStar, @Olivеr, Меня не интересуют вектора, я знаю как с ними работать, меня интересуют указатели.
P.S. А нельзя на примере моего кода показать, что мне нужно дописать, что-бы у меня все работало?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
29.06.2013, 13:36     Вывод букв с помощью указателей (требуется помощь) #5
@Nikko12, так не получится. Смотри мой 1-й вариант.
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
29.06.2013, 15:31  [ТС]     Вывод букв с помощью указателей (требуется помощь) #6
@Olivеr, Почему не получится если не секрет??

Добавлено через 19 минут
@Olivеr, Сомневаюсь, что это может не получится, как сделаю покажу тебе (или Вам).
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
29.06.2013, 15:33     Вывод букв с помощью указателей (требуется помощь) #7
@Nikko12, указатели содержат адрес некоего участка памяти. С каких пор файл стал памятью?
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
29.06.2013, 16:02  [ТС]     Вывод букв с помощью указателей (требуется помощь) #8
@Olivеr, Ок, а если тогда считать сначало все строки в массив и потом при помощи указателей на первую букву, вывести слова?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
29.06.2013, 20:58     Вывод букв с помощью указателей (требуется помощь) #9
@Nikko12, не занимайтесь ерундой. Как получить доступ ко всем словам в файле написано выше.
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
30.06.2013, 11:41  [ТС]     Вывод букв с помощью указателей (требуется помощь) #10
Программа считывает строки из файла и суммирует строки в строку str_new, при это создавая указатели на кажую новую строку которая была прибавлена и сохраняя их массиве в point[]. Если фаил вида:
"abcd
efgh
ijkl", то в конце строка str_new будет равна "abcdefghijkl", а указатели будут равны point[0]=a, point[1]=e, point[2]=i. Зная куда указывают указатели как вывести обратно строки при помощи указателей, т. е. должно быть:
"abcd
efgh
ijkl"
P.S. Пожалуйста подскажите, вот код:
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
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    ifstream cin("input.txt");
    int word_leng[100],i=0,j,m=0,pointer,sum=0;
    char *p,*point[100];
    string str,str_new;
    while(cin>>str)// считывание пока не конец файла
    {
        word_leng[m]=str.length();
        str_new=str_new+str;
        pointer=str_new.length()-str.length();
        point[m]=&str_new[pointer];// создание указателя и запись его в массив
        //cout<<pointer<<" "<<*point[m]<<endl;
        m++;
    }
    for(i=0;i<m;++i)// кол-во стобцов
    {
        for(j=0;j<word_leng[i];++j)// вывод до длины слова
        {
            //вывод
        }
        cout<<endl;
    }
    return 0;
}
P.S. Желательно просто подсказать, что нужно дописать в 23 строке (если все остальное у меня написано верно).
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
30.06.2013, 11:51  [ТС]     Вывод букв с помощью указателей (требуется помощь) #11
@Olivеr, Пожалуйста не указывайте, что мне делать, спс
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
30.06.2013, 15:54     Вывод букв с помощью указателей (требуется помощь) #12
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
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    const int N=100;
    ifstream cin("input.txt");
    int i=0,word_len[N];
    char cstr[N],cstr2[N],*point[N],*p;
    memset(cstr,0,N);
    p=cstr;
 
    while(cin)
    {
        cin>>cstr2;
        word_len[i]=strlen(cstr2);
        strcat(cstr,cstr2);
        point[i]=p;
        p+=strlen(cstr2);
        i++;
    }
 
    for(int j=0;j<i;j++)
    {
        for(int n=0;n<word_len[j];n++)
        {
            cout<<*(point[j]);
            (point[j])++;
        }
        cout<<endl;
    }
 
    system("pause");
    return 0;
 
}
вот!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2013, 18:07     Вывод букв с помощью указателей (требуется помощь)
Еще ссылки по теме:

C++ Поменять местами в последовательности наибольший и наименьший члены с помощью указателей
C++ Переписать решение системы линейных уравнений с помощью указателей
C++ Индексация массивов с помощью указателей

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

Или воспользуйтесь поиском по форуму:
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
30.06.2013, 18:07  [ТС]     Вывод букв с помощью указателей (требуется помощь) #13
Miwa123, Огромное спасибо!
Yandex
Объявления
30.06.2013, 18:07     Вывод букв с помощью указателей (требуется помощь)
Ответ Создать тему
Опции темы

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