Bonjour à tous.
Je souhaite créer un petit programme en C++ pour trier des caractères importés d'un fichier texte en Français. Et rien qu'au début j'ai déjà des problèmes
Je vous explique, pour le moment je voudrais :
1 - Importer un fichier texte dans un tableau dynamique(tabA) pour que la taille du tableau s'adapte à la longueur du texte qui peut donc varier.(et déjà je n'ai pas réussi, je suis donc parti sur des tailles de tableaux fixes)
2 - Faire un premier tri du tableau (tabA) de tous les caractères importés vers un second tableau (tabB) ne contenant que les lettres minuscules. J'ai bien un embryon de code d'une instruction de condition dans une boucle pour exécuter cette tache mais le rangement des minuscules dans le deuxième tableau(tabB) ne se fait pas comme espéré :
J'aurais voulu que tabA[i] ne renvoi pas les espaces entre les mots vers tabB[i] pourtant il le fait car sans doute par copie d'indice sur indice. Or ceux ci devraient être éliminé de fait par le if, mais non. En gros j'aurais voulu que tabA[i] ne renvoi aucun élément non correspondant aux minuscules. Or la j'ai des "=" à chaque espace dans le tabB. (Pourquoi d'ailleurs "=" ? )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 for (int i = 0; i < 200; i++) { if (tabA[i] > 96 && tabA[i] < 173) { tabB[i] = tabA[i];// Tri et enregistrement dans le tableau B: carNb++;//Nombre de caractères tries. } }
Le carNb pour nombre de caractères fonctionne aussi mal du coup.
La tentative de récupération de la taille du tableau (sizeOf) pour en déduire le nombre de caractère n'est juste pas approprié la. ( = lacune de débutant)
De ce que je comprends il par sur 32/4 = 8.
Quoiqu'il en soit en affichant le tableau soit disant triés tabB, on se rend bien compte que cela ne fonctionne pas.
Aussi je me demande si pour ce genre de problématique partir sur des tableaux est une bonne idée... car par la suite les
Je met ci dessous le résultat de la compilation :
Ainsi que le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 #include<stdio.h> #include <cstdio> #include <cstdlib> #include <iostream> using namespace std; int main() { //Variables et tableaux: int carNb = 0; char tabA[200] = { 0 }; char* tabB = new char[200];//Tentative de tableau dynamique //Pointeur: FILE* txtFile = NULL; //Affectation d'un fichier sur pointeur et ouverture: fopen_s(&txtFile, "./00_Ressources/TextToImport.txt", "r"); //Enregistrement du contenu(caratere par caractere) du texte dans le fichier vers le tableau A: if (txtFile != NULL) { do { for (int i = 0; i < 200; i++) { tabA[i] = fgetc(txtFile); } } while (fgetc(txtFile) != EOF); //Fermeture fichier: fclose(txtFile); } else printf("Ouverture impossible"); //Premier tri des caracteres par le code ASCII(Je ne garde que les lettres minuscules): for (int i = 0; i < 200; i++) { if (tabA[i] > 96 && tabA[i] < 173) { tabB[i] = tabA[i];// Tri et enregistrement dans le tableau B: carNb++;//Nombre de caracteres tries. } } // Affichage du tableau trié(tabB): cout << "Le nombre de lettre minuscule dans le texte est de : " << carNb << "\n"; //ou cout << "Le nombre de lettre minuscule dans le texte est de : " << sizeof tabB << "\n"; cout << "\nEt en voici la liste : " << "\n"; for (int i = 0; i < carNb; i++) { //printf_s("%c\n", tabB[i]); cout << tabB[i] ; } cout << "\n"; return 0; }
Merci par avance pour vos retours, vos critiques et vos remarques.
Cdt, Stephane.
Partager