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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
#1

Список List. Добавляем строки типа char - C++

16.04.2012, 14:37. Просмотров 2496. Ответов 6
Метки нет (Все метки)

Собственно, не получается в List добавлять корректно строки char.
Нужно получить список из входных строк, а получается список из первых символов входных строк char.
например.
ВХОД: qwerty
werty
erty
rty
ВЫХОД: q w e r
НУЖНО: qwerty werty erty rty
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
#include <iostream>
#include <list>
#include <string>
 
using namespace std;
 
int main()
{
    int i;
    int k,j;
 
    char *chat_Name=new char[32];
 
    std::list<char> User_Names_chat;
 
    for(i=0;i<5;i++)
    {
        cin.getline(chat_Name,32);
        User_Names_chat.push_back(*chat_Name);
    }
 
    for(std::list<char>::iterator it = User_Names_chat.begin(); it != User_Names_chat.end(); it++)
        std::cout<<*it<<" ";
}
Проверил на 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
#include <iostream>
#include <list>
#include <string>
 
using namespace std;
 
int main()
{
    int i;
    int k,j;
    string str_Name;
    
    std::list<string> User_Names;
 
    for(i=0;i<5;i++)
    {
        cin>>str_Name;
        User_Names.push_back(str_Name);
    }
 
    for(std::list<string>::iterator it = User_Names.begin(); it != User_Names.end(); it++)
        std::cout<<*it<<" ";
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2012, 14:37     Список List. Добавляем строки типа char
Посмотрите здесь:
Список типа массива char C++
Добавление в массив типа char * одного элемента типа char C++
Аргумент типа char (*)[1000] несовместим с параметром типа char** C++
C++ Удаление символов из строки типа char
C++ Сравнение строки в структуре с переменной типа char
C++ Преобразование части строки типа char в число
C++ Считать с файла строку типа char до знака окончания строки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
Эксперт C
15681 / 10008 / 1504
Регистрация: 24.12.2010
Сообщений: 18,801
16.04.2012, 14:55     Список List. Добавляем строки типа char #2
C++
1
User_Names_chat.push_back(chat_Name);
строка 19 - убери звезду
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
16.04.2012, 14:58     Список List. Добавляем строки типа char #3
Байт, Эм. Тогда и список должен быть типа std::list<char*>. И вообще со списком лучше указатели не юзать-с.
GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
16.04.2012, 16:11  [ТС]     Список List. Добавляем строки типа char #4
Байт,
тогда появляется ошибка
Код
error C2664: void std::list<_Ty>::push_back(_Ty &&): невозможно преобразовать параметр 1 из "char *" в "char &&"
Цитата Сообщение от ForEveR Посмотреть сообщение
И вообще со списком лучше указатели не юзать-с
а что юзать? строки string?
тогда появляется вопрос как string потом перевести в char?
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
16.04.2012, 16:17     Список List. Добавляем строки типа char #5
GBIT,
C++
1
std::string::c_str()
GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
16.04.2012, 18:18  [ТС]     Список List. Добавляем строки типа char #6
ForEveR,
согласен. уже погуглил)

итак. плавно перехожу к собственно из-за чего весь сыр бор

написал код

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
void Write_Substance()
{
    string Name_Substance;
    DWORD buf;
        HANDLE hFile;
        const char* str33;
 
    std::cin>>Name_Substance;
    str33=Name_Substance.c_str(); 
    //cout<<str33;
 
    char *NameF = new char [MAX_PATH];
    strcpy(NameF,"database.txt");
 
    hFile = CreateFileA(NameF,
        GENERIC_READ|GENERIC_WRITE,
        0,
        0,
        OPEN_ALWAYS,
        0,
        0);
 
    WriteFile (hFile, str33, sizeof(str33), &buf, NULL);
 
}
по идее фун-я должна писать в файл ту строку которую я напишу. но записываются только первые 4 символа. почему?

Добавлено через 6 минут
понял что дело в 23 строке.
а именно в sizeof(str33). но почему sizeof(str33)=4 ???
поставил туда 10. записало 10 символов из str33
если str33 < 10 то в файле текст + мусор

Добавлено через 1 час 21 минуту
разобрался. дело в том что sizeof(char*)=4.
нужно через size() отдельно где-то хранить еще и длину string
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2012, 18:28     Список List. Добавляем строки типа char
Еще ссылки по теме:
C++ Ошибка "аргумент типа char несовместим с параметром типа char*"
АТД "Однонаправленный список" с элементами типа char C++
Аргумент типа "unsigned char*" несовместим с параметром типа "const char*" C++
Аргумент типа WCHAR* не совместим с параметром типа const char* C++
C++ Читать строку типа string из файла, разбить ее на массив слов типа char

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

Или воспользуйтесь поиском по форуму:
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
16.04.2012, 18:28     Список List. Добавляем строки типа char #7
GBIT, Для char* есть функция strlen.
Yandex
Объявления
16.04.2012, 18:28     Список List. Добавляем строки типа char
Ответ Создать тему
Опции темы

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