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

Связь списков - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Простой ввод строки с пробелами через string http://www.cyberforum.ru/cpp-beginners/thread820321.html
Visual studio 2012, никак не могу ввести строку через string. У меня не работает вот этот фрагмент кода: #include "stdafx.h" #include "iostream" #include <string.h> #include "stdio.h" using namespace::std; using namespace::System; void main() {
C++ Определить число вхождений символа в предложение Суть задачи: Дано предложение. Определить число вхождений в него некоторого символа. Вот мой код: #include "stdafx.h" #include <iostream> using namespace std; int _tmain() http://www.cyberforum.ru/cpp-beginners/thread820318.html
C++ Получить b1,…,bn, где bi – это сумма элементов, расположенных за первым отрицательным элементом в i-й строки
пусть дано натуральное число n и целочисленная квадратная матрица порядка n. Получите b1,…,bn, где bi – это сумма элементов, расположенных за первым отрицательным элементом в i-й строки (если все строки неотрицательные, то принять bi=100)
Множества. Вычислить количество элементов множества Q, связанного c исходными множествами C++
В общем задание звучит так : Заданы 3 упорядоченных множества F, G и H, представленные файлами f, g и h соответственно. Вычислить количество элементов множества Q, связанного c исходными множествами F, G и H следующим образом:Q = (F объединение G) пересечение H. Вот мой код но он вобще не оптимизирован да и работает не правильно помогите доработать. #include <iostream> #include <fstream>...
C++ Перевести на C++ Basic http://www.cyberforum.ru/cpp-beginners/thread820241.html
Условие задачи такое: В одномерном массиве найти сумму чисел,расположенных между первым минимальным и последним максимальным элементами массива. uses crt; const n=20; var a:array of integer; i,imax,imin:byte; max,min,sum:integer; begin clrscr; randomize; writeln('Massiv:');
C++ Тип unsigned long long Добрый день. У меня возник вопрос: Почему в результате выполнения программы выводится число: -1? А должно: 18446744073709551615 #include <stdio.h> #include <conio.h> #include <stdlib.h> int main() { unsigned long long a; подробнее

Показать сообщение отдельно
awpe
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 87
27.03.2013, 18:29     Связь списков
Доброго времени суток,

В процессе решения задачи, встретилась проблема:
есть структура
C++
1
2
3
4
struct TStruct {
std::string * m_String_1;
std::string * m_String_2;
}
есть массивы:
C++
1
2
3
4
std::string ** arr_Type_1_Strings;
unsigned int Type1StringsCount;
std::string ** arr_Type_2_Strings;
unsigned int Type2StringsCount;

Что я делал:
Идет запрос на добавление структуры (с указанием значений для ее элементов), тогда проверяется есть ли в
C++
1
arr_Type_1_Strings
строка соответствующая первому значению и то же самое для второго значния из запроса, если оба есть (а спец. функция, которая проверяет наличие, на самом деле, просто возвращает указатель на соответсвующий элемент соответствующего массива ), то функция добавления возвращает ложь, иначе создается необходимая структура
C++
1
 (TStruct *tmpStruct=new TStruct)
отсутствующие строки создаются или просто записываются указатели на них в случае если эти указатели есть, т.е.
C++
1
tmpStruct->m_String_X = указатель на элемент массива где находится добавляемая строка.
Создаются эти строки (если в списке строк запрашиваемая не была найдена) так:
в массиве выделяется память под указатель
C++
1
 (std::string**)malloc(...)
, потом создается новая строка
C++
1
arr_Type_X_Strings[number]=new std::string;
потом начинается самое интересное, методом деления массива пополам, находится индекс элемента (@index) на месте которого должна быть новая строка @Str2Add (дабы сохранять порядок в массиве).

Далее в цикле (если конечно индекс не больше числа элементов в массиве до дополнения, иначе после выделения памяти элемент запишется в последнюю ячейку):

C++
1
2
3
for(unsigned int i=Type1StringsCount;i>@index;i--){
     *arr_Type_X_Strings[i]=*arr_Type_X_Strings[i-1];
}
и наконец
C++
1
arr_Type_X_Strings[@index]=@Str2Add;
и возвращается указатель на новую строку.


Это лишь малая часть программы, пока я писал остальные части я проводил тестирование (совпало) на строках идущих по порядку, соответсвенно никаких повторяющихся данных (типа std::string во всяком случае) и все в нужном порядке, но когда написав много кода, я ввел строки идущие не попорядку я удивился выводу, содержимое структур не соответсвовало ожиданиям, оно и понятно вот здесь:
C++
1
*arr_Type_X_Strings[i]=*arr_Type_X_Strings[i-1];
менялись не указатели а сами строки (вроде так да?) а точнее они смещались, что вроде бы я и хотел, вот только двойной массив я использовал, как мне казалось, чтобы данные в структурах не съехали (потом у каждой структуры другие значения выводятся, т.к. сместилось соответствие), сейчас я понимаю что запутался просто в указателях, однако сейчас мне в голову приходят только такие решения - при каждом сдвиге части массива, проходит в цикле ВСЕ (много времени процессора) структуры и изменять там указатель на новое значение позиции строки в ее массиве, либо сделать подобие базы данных с тремя столбцами - первый столбец это не изменяемый идентификатор строки (указатель этого массива бд на который ссылается элемент структуры) второй столбец это адрес элемента в промежуточном массиве, третий столбец это физический адрес строки. Хотя нет опять ерунда какая то получается, может надо использовать два массива, в одном указано соответствие физического и порядкого в другом запрашиваемого и порядкового, и при добавлении строки менять указатели в промежуточном массиве, сохраняя таким образом значение для элемента структуры. Как видите я никак не осилю эта задачу, варианты с линейными наивными решениями (разумеется с теми, которые неоправданно используют память и процессорное время) не катят, если каждая строка по 1000 символов и у вас 8000 строк, то копировать их туда сюда целиком вместе со структурой не лучший выход поэтому массивы.

Что можете предложить?

Добавлено через 6 минут
P.S. доступные библиотеки :
C++
1
2
3
4
5
6
#include <iostream>
#include <iomanip>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
так что, к сожалению без векторов и других радостей STL, в задании проверяется умение решать задачи без STL.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru