Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 400
#1

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

22.03.2014, 16:35. Просмотров 603. Ответов 10
Метки нет (Все метки)

Здравствуйте! Не могу понять, как заполнить переменную типа 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++;
                }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2014, 16:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как заполнить переменную типа WCHAR предложением путем добавления словом за словом? (C++):

Как сравнить строку со словом - C++
Добрый день. Программа попросила ввести строку, я ввёл. Дальше программа сравнивает введённую строку с фиксированным значением "logN" и...

Как зашифровать текст из файла шифрованием Цезаря с ключевым словом? - C++
в общем дан текст в файле.Нужно зашифровать его, например, с помощью кода Ascii, и записать в другой файл. нет даже предположений, так как...

Аргумент типа WCHAR* не совместим с параметром типа const char* - C++
Как исправить косяк? VS12 ругаетсЯ #include <windows.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include...

Операции со словом - C++
Дано слово.Если оно четной длины, то удалите 2-ю половину слова,а первую переверните. Если слово нечетной длины, то удалите средний...

программа с работой над словом - C++
Помогите написать программу чтобы в начале выдавала все буквы алфавита и посли того как вбить слово она его делила на 3 раздела гласные...

Перестановочный шифр с ключевым словом - C++
Помогите, нужно сделать программу что будет зашифровывать и расшифровывать текст с помощью перестановочного шифра. Буквы открытого...

10
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,080
Записей в блоге: 10
Завершенные тесты: 1
22.03.2014, 17:05 #2
Эт чё эт у тебя в 8-й строке за шаманский бубен такой?
0
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 400
22.03.2014, 17:12  [ТС] #3
Цитата Сообщение от castaway Посмотреть сообщение
Эт чё эт у тебя в 8-й строке за шаманский бубен такой?
Пока не конец строки делать так! Хотя да, можно было бы и без этого обойтись
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.03.2014, 17:23 #4
Цитата Сообщение от casper007 Посмотреть сообщение
Пока не конец строки делать так!
А что, это условие в очередной прекрасный момент может вернуть что-то отличное от нуля?
0
zss
Модератор
Эксперт С++
6531 / 6093 / 2007
Регистрация: 18.12.2011
Сообщений: 15,845
Завершенные тесты: 1
22.03.2014, 18:03 #5
Массивы символов надо объединять с помощью функции
C++
1
wcscat(arrresult,arrayadd);
Например
C++
1
wcscat(Quest[i].Question,_TEXT(" "));
1
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 400
22.03.2014, 19:50  [ТС] #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 минут
Хм. Почему-то ничего не записывается в структуру.
0
iRomul
159 / 100 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
22.03.2014, 20:38 #7
Мне кажется, или в строке 8 должны быть одиночные кавычки?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.03.2014, 20:48 #8
iRomul, 8я строка вообще полна нелепостей и равносильна
C++
1
while( false )
0
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 400
22.03.2014, 20:50  [ТС] #9
Цитата Сообщение от iRomul Посмотреть сообщение
Мне кажется, или в строке 8 должны быть одиночные кавычки?
8-ая строка уже была удалена. Проблема в другом.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.03.2014, 20:55 #10
casper007, сравнивать строки потому что надо через strcmp и подобные ей функции, а через == идет сравнение адресов. Ну или используйте нормальные строковые классы. Также не забудьте строку обнулить перед первой конкатенацией.
0
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 400
23.03.2014, 19:00  [ТС] #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;
                                  }
0
23.03.2014, 19:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2014, 19:00
Привет! Вот еще темы с ответами:

Перед каждым словом добавить слово - C++
Перед каждым словом, начинающимся с буквы 'a' добавить слово "вот".

Поиск строки с необходимым словом в файле - C++
Здравствуйте! Есть txt файл и в нём n-ое количество строк, необходимо найти строку в которой есть слово "Программа". План действий: ...

Сравнивание двумерного символьного динамического массива со словом - C++
Здравствуйте! Пожалуйста, помогите разобраться в этом условии: if (dictionary]==*word) count++; Здесь dictionary - двумерный символьный...

Напечатать все слова, которые совпадают с ее первым словом - C++
Задана строка, состоящая из символов. Символы объединяются в слова. Слова друг от друга отделяются одним или несколькими пробелами. В...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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