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

Как заполнить переменную типа WCHAR предложением путем добавления словом за словом? - C++

Восстановить пароль Регистрация
 
casper007
61 / 61 / 21
Регистрация: 12.12.2013
Сообщений: 381
22.03.2014, 16:35     Как заполнить переменную типа WCHAR предложением путем добавления словом за словом? #1
Здравствуйте! Не могу понять, как заполнить переменную типа WCHAR предложением путем добавления словом за словом? Все таки придется организовывать массив, и добавлять букву за буквой? А может использовать vector? Но как его применить?
Вообще мысль такова: считать из файла в символьный массив все слова до разделителя "%". Это Будет вопрос, далее идут 4 варианта ответа и правильный ответ.


Структура:
C++
1
2
3
4
5
6
struct Polya //struct for baza questions 
{
    WCHAR Question[450], var1[50], var2[50], var3[50], var4[50];
    WCHAR Answer[70];
};
Polya *Quest = new Polya[100];

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
WCHAR temp[50];
    wifstream File; int i=0;
                locale loc("rus_rus.1251");
                File.imbue(loc);
                File.open(_TEXT("Baza.txt"),ios_base::in); 
                while(!File.eof())
                {
                    while(!("\n")) //сканируем всю строку
                        {
                             
                             File>>temp;
                             while(temp!= _TEXT("%")) // записываем предложение, пока не встретился тег - разделитель вопроса от ответов.
                                  {
                                   Quest[i].Question+=_TEXT(" ")+temp; //Ошибка!!!
                                   File>>temp;
                                  }
                             File>>Quest[i].var1>>Quest[i].var2>>Quest[i].var3>>Quest[i].var4>>Quest[i].Answer;
                        }
                    i++;
                }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2014, 16:35     Как заполнить переменную типа WCHAR предложением путем добавления словом за словом?
Посмотрите здесь:

C++ Перестановочный шифр с ключевым словом
В любом тексте между 3 и 4 словом вставить новое слово C++
Перед каждым словом добавить слово C++
C++ Как зашифровать текст из файла шифрованием Цезаря с ключевым словом?
программа с работой над словом C++
C++ В заданном предложении перед каждым словом поставить символ «?»
Как сравнить строку со словом C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,056
Записей в блоге: 10
Завершенные тесты: 1
22.03.2014, 17:05     Как заполнить переменную типа WCHAR предложением путем добавления словом за словом? #2
Эт чё эт у тебя в 8-й строке за шаманский бубен такой?
casper007
61 / 61 / 21
Регистрация: 12.12.2013
Сообщений: 381
22.03.2014, 17:12  [ТС]     Как заполнить переменную типа WCHAR предложением путем добавления словом за словом? #3
Цитата Сообщение от castaway Посмотреть сообщение
Эт чё эт у тебя в 8-й строке за шаманский бубен такой?
Пока не конец строки делать так! Хотя да, можно было бы и без этого обойтись
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
22.03.2014, 17:23     Как заполнить переменную типа WCHAR предложением путем добавления словом за словом? #4
Цитата Сообщение от casper007 Посмотреть сообщение
Пока не конец строки делать так!
А что, это условие в очередной прекрасный момент может вернуть что-то отличное от нуля?
zss
Модератор
Эксперт С++
 Аватар для zss
6054 / 5657 / 1828
Регистрация: 18.12.2011
Сообщений: 14,448
Завершенные тесты: 1
22.03.2014, 18:03     Как заполнить переменную типа WCHAR предложением путем добавления словом за словом? #5
Массивы символов надо объединять с помощью функции
C++
1
wcscat(arrresult,arrayadd);
Например
C++
1
wcscat(Quest[i].Question,_TEXT(" "));
casper007
61 / 61 / 21
Регистрация: 12.12.2013
Сообщений: 381
22.03.2014, 19:50  [ТС]     Как заполнить переменную типа WCHAR предложением путем добавления словом за словом? #6
Цитата Сообщение от zss Посмотреть сообщение
Массивы символов надо объединять с помощью функции
Но почему-то вылетает ошибка в момент выполнения этого участка
C++
1
2
3
4
5
6
 while(temp!= _TEXT("%")) 
 {
     wcscat_s(Quest[i].Question, temp); //Массивы 
     wcscat_s(Quest[i].Question,_TEXT(" "));
     File>>temp;
     }
Почему-то функция начинает перебирать символы из параметра arrresult с конца. Зачем?
Ошибка:
Код
Debug Assertion Failed!
Program: C:\Users\admin\Desktop\Tests 1.0\Debug\Tests 1.0.exe
File: f:\dd\vctools\crt_bld\self_x86\crt\src\tcscat_s.ini
Line: 32
Expression: (L"String is not null terminated" &&0)
For information on how your program can cause an assertion
failure, seethe Visual С++ documentation on asserts.
(Press Retry to debug the application)
Если я правильно понял, что переменная начинается с символа 0, от чего и происходит ошибка.


Все, понял. Неправильное использование безопасной функции wcscat_s.

Добавлено через 6 минут
Хм. Почему-то ничего не записывается в структуру.
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
22.03.2014, 20:38     Как заполнить переменную типа WCHAR предложением путем добавления словом за словом? #7
Мне кажется, или в строке 8 должны быть одиночные кавычки?
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
22.03.2014, 20:48     Как заполнить переменную типа WCHAR предложением путем добавления словом за словом? #8
iRomul, 8я строка вообще полна нелепостей и равносильна
C++
1
while( false )
casper007
61 / 61 / 21
Регистрация: 12.12.2013
Сообщений: 381
22.03.2014, 20:50  [ТС]     Как заполнить переменную типа WCHAR предложением путем добавления словом за словом? #9
Цитата Сообщение от iRomul Посмотреть сообщение
Мне кажется, или в строке 8 должны быть одиночные кавычки?
8-ая строка уже была удалена. Проблема в другом.
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
22.03.2014, 20:55     Как заполнить переменную типа WCHAR предложением путем добавления словом за словом? #10
casper007, сравнивать строки потому что надо через strcmp и подобные ей функции, а через == идет сравнение адресов. Ну или используйте нормальные строковые классы. Также не забудьте строку обнулить перед первой конкатенацией.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2014, 19:00     Как заполнить переменную типа WCHAR предложением путем добавления словом за словом?
Еще ссылки по теме:

Сравнивание двумерного символьного динамического массива со словом C++
Операции со словом C++
Поиск строки с необходимым словом в файле C++
Поменять первое слово предложения с самым коротким словом C++
Шифрование/дешифрование шифра Трисемуса с любым ключевым словом C++

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

Или воспользуйтесь поиском по форуму:
casper007
61 / 61 / 21
Регистрация: 12.12.2013
Сообщений: 381
23.03.2014, 19:00  [ТС]     Как заполнить переменную типа WCHAR предложением путем добавления словом за словом? #11
Цитата Сообщение от Tulosba Посмотреть сообщение
Также не забудьте строку обнулить перед первой конкатенацией.
По поводу сравнения я понял. А по поводу обнуления нет. Можете написать пример кода по моей теме?

Добавлено через 38 минут
Цитата Сообщение от Tulosba Посмотреть сообщение
Также не забудьте строку обнулить перед первой конкатенацией
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void Questions(void)
{WCHAR temp[50], temp1[50];
    wifstream File; int i=0;
                locale loc("rus_rus.1251");
                File.imbue(loc);
                File.open(_TEXT("Baza.txt"),ios_base::in); 
                if(File.fail()) {MessageBoxW(HWND_DESKTOP, _TEXT("File not Open"), _TEXT("Error!!!"), MB_OK); PostQuitMessage(0);}
                while(!File.eof())
                {    
                             File>>temp;
                             while(wcscmp(temp,L"%")) // записываем предложение, пока не встретился тег - разделитель вопроса от ответов.
                                  {
                                      wcscat(wcscpy(Quest[i].Question, temp), temp1); //Массивы символов надо объединять с помощью функции
                                      wcscat(Quest[i].Question,_TEXT(" "));
                                   File>>temp;
                                  }
                             File>>Quest[i].var1>>Quest[i].var2>>Quest[i].var3>>Quest[i].var4>>Quest[i].Answer;
                    i++;
                }
}
Функция постоянно перезаписывает переменную с ответом. Как поступить?

Добавлено через 12 минут
C++
1
2
3
4
5
6
7
File>>temp;
                             while(wcscmp(temp,L"%")) // записываем предложение, пока не встретился тег - разделитель вопроса от ответов.
                                  {
                                      wcscat(wcscpy(Quest[i].Question, _TEXT(" ")),temp); //Массивы символов надо объединять с помощью функции
                                     // wcscat(Quest[i].Question,_TEXT(" "));
                                   File>>temp;
                                  }
Yandex
Объявления
23.03.2014, 19:00     Как заполнить переменную типа WCHAR предложением путем добавления словом за словом?
Ответ Создать тему
Опции темы

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