Ma tâche était de créer une pseudodatabase en C++. Il y a 3 tables données, le nom du magasin (char *), age (int) et sex (bool). Ecrire un programme permettant de:
- ajouter de nouvelles données aux tables
- afficher tous les enregistrements
- tables de tri avec vos critères:
- nom croissant/décroissant
- âge croissant/décroissant
- sexeSimple 'base de données' en C++
L'utilisation de modèles de fonctions est un must. La taille des tableaux doit également être variable, en fonction de la quantité d'enregistrements.
J'ai du code mais il y a encore des problèmes. Voici ce que j'ai: Fonction tabSize() pour retourner la taille du tableau. Mais actuellement, il retourne la taille du pointeur je suppose:
#include <iostream>
using namespace std;
template<typename TYPE> int tabSize(TYPE *T)
{
int size = 0;
size = sizeof(T)/sizeof(T[0]);
return size;
}
Comment faire revenir la taille du tableau, pas son pointeur?
Ensuite, le plus important: add() pour ajouter de nouveaux éléments. À l'intérieur d'abord j'obtiens la taille du tableau (mais par conséquent il renvoie la valeur du pointeur, et pas la taille c'est inutile maintenant: /). Ensuite, je pense que je dois vérifier si TYPE de données est char. Ou ai-je tort ?
// add(newElement, table)
template<typename TYPE> TYPE add(TYPE L, TYPE *T)
{
int s = tabSize(T);
//here check if TYPE = char. If yes, get the length of the new name
int len = 0;
while (L[len] != '\0') {
len++;
}
//current length of table
int tabLen = 0;
while (T[tabLen] != '\0') {
tabLen++;
}
//if TYPE is char
//if current length of table + length of new element exceeds table size create new table
if(len + tabLen > s)
{
int newLen = len + tabLen;
TYPE newTab = new [newLen];
for(int j=0; j < newLen; j++){
if(j == tabLen -1){
for(int k = 0; k < len; k++){
newTab[k] =
}
}
else {
newTab[j] = T[j];
}
}
}
//else check if tabLen + 1 is greater than s. If yes enlarge table by 1.
}
Est-ce que je pense correct ici?
Dernières fonctions show() est correct, je suppose:
template<typename TYPE> TYPE show(TYPE *L)
{
int len = 0;
while (L[len] == '\0') {
len++;
}
for(int i=0; i<len; i++)
{
cout << L[i] << endl;
}
}
et problème avec tri() est le suivant: Ho je peux influencer si le tri est croissant ou décroissant? J'utilise le genre de bulle ici.
template<typename TYPE> TYPE sort(TYPE *L, int sort)
{
int s = tabSize(L);
int len = 0;
while (L[len] == '\0') {
len++;
}
//add control increasing/decreasing sort
int i,j;
for(i=0;i<len;i++)
{
for(j=0;j<i;j++)
{
if(L[i]>L[j])
{
int temp=L[i];
L[i]=L[j];
L[j]=temp;
}
}
}
}
et fonction principale pour l'exécuter:
int main()
{
int sort=0;
//0 increasing, 1 decreasing
char * name[100];
int age[10];
bool sex[10];
char c[] = "Tom";
name[0] = "John";
name[1] = "Mike";
cout << add(c, name) << endl;
system("pause");
return 0;
}
Je ne suggère pas de stocker en tant que 'std :: string' en interne si l'affectation dit d'utiliser' char * 'sauf si vous demandez d'abord à votre instructeur (ou TA). Alors que dans n'importe quel scénario réel, vous voudriez utiliser 'std :: string', une partie du but de l'affectation pourrait être d'apprendre la gestion manuelle de la mémoire, et s'ils lisent votre code et trouvent' std :: string', vous pourriez perdre le crédit pour cela. –