(Traduit de l'allemand à Englisch) Je besoin d'aide dans cet exercice:type String avec Exercice Pascal
Sujet: traitement chaîne L'utilisateur peut apporter des modifications simples à une phrase d'entrée.
conditions
Le programme affiche un menu pour l'utilisateur de sélectionner l'action suivante. Ceci est également affiché à nouveau une fois l'action terminée jusqu'à ce que l'utilisateur termine le programme (une boucle est donc nécessaire).
Le menu contient les éléments suivants, qui doivent être exécutées lorsque la lettre spécifiée est entrée:
A. Entrez la phrase
B. Déterminer le nombre de mots
C. Déterminer la nombre de caractères qui sont inférieurs à leur caractère de séquence
D. Remplacer tous les mots de la phrase avec leurs initiales en majuscules
X. fin
Si l'utilisateur entre une lettre différente, rien ne se passe ou le menu est sorti à nouveau.
Si l'option de menu A est sélectionnée, une invite est émise pour entrer un jeu qui est lu dans une variable de chaîne. Cette variable ne peut pas être modifiée par les actions des éléments de menu B, C et D! Peut-être. Une copie de l'ensemble doit être préparée au préalable dans une autre variable de chaîne.
Dans le point de menu B, le nombre de tous les mots du bloc doit être compté. Pour simplifier, vous pouvez supposer qu'il y a toujours un espace entre deux mots. Au début et à la fin de la phrase, il n'y a pas d'espaces. Le nombre de mots est sorti après le calcul (par exemple, "L'ensemble est de 4 mots").
Si l'utilisateur exécute l'élément de menu C, l'ensemble est traversé caractère par caractère, et pour chaque caractère, il est vérifié s'il est plus petit que son caractère final. Voici une simple comparaison de caractères (vous pouvez également écrire directement quelque chose comme '1' < 'd'). Le nombre de caractères ainsi trouvés est ensuite sorti (par exemple, "13 caractères trouvés dans la phrase sont inférieurs au caractère final").
Dans l'élément de menu D, la phrase est traversée et chaque mot qu'elle contient est remplacé par son caractère initial en majuscule. La capitalisation n'est bien sûr faite que si le premier caractère est une lettre, sinon le caractère reste inchangé. Vous pouvez supposer que la phrase ne commence jamais ou se termine avec un espace. Entre deux mots, il y a toujours exactement un espace et il devrait donc être entre les lettres initiales. Par exemple, de "123 bonne humeur" devient "1 G L".
Il n'est pas permis ici de réaliser une chaîne complètement neuve pièce par pièce! Au lieu de cela, vous devriez travailler dans une boucle sur une copie de la phrase originale avec pos, copier, longueur, supprimer et insérer! Il est également interdit de "rassembler" les caractères initiaux tout au début ou à la fin de la chaîne; Ceux-ci doivent être insérés directement dans la chaîne à la position du mot correspondant!
En outre, une chaîne n'est pas accessible au point de menu D, car le travail avec les sous-chaînes doit être explicité ici. Les éléments de menu B, C et D ne peuvent être sélectionnés que si un enregistrement a déjà été entré.Dans le cas contraire, rien ne se passe ou un message d'erreur est entré en entrant B, C ou D dans le menu et le menu est sorti à nouveau.
Chaque appel aux éléments de menu B, C ou D fonctionnera toujours sur l'ensemble d'origine entré par l'utilisateur et non sur un ensemble qui a déjà été modifié par des éléments de menu précédemment exécutés!
En entrant de nouveau dans l'élément de menu A, le bloc entré peut être écrasé par un nouveau.
Avec un 'X', l'utilisateur peut terminer le programme.
Utilisez n'importe où les fonctions de chaîne prédéfinies et ne l'écrivez pas vous-même avec des boucles de difficulté, etc.! Cependant, l'utilisation des fonctions strreplace ou reverseString est interdite!
Voilà mon travail jusqu'à présent, je n'ai que des problèmes avec la partie D:
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
const
lz = ' ';
var
Satz: string;
Buchstabe: char;
i, p, j, zaehler2, index, count: integer;
writeln('A) Write Sentence');
readln(Satz);
'D':
begin
index := 2;
insert(lz, Satz, length(Satz)+1);
count := (pos(lz,Satz));
repeat
delete(Satz, index,(count - index));
index := index + 2;
count := pos(lz,copy(Satz,index,(length(Satz)-index)))+index-1;
until ;
writeln(uppercase(Satz));
end
Ce q semble très similaire à votre https://stackoverflow.com/questions/44247115/exercise-with-type-string-in-pascal, mais avec du code ajouté, ce qui correspond mieux à SO. Qu'est-ce qui fait que le point D vous cause des difficultés? Habituellement, les élèves trouvent que diviser l'entrée en mots est la partie difficile. La plupart des implémentations pascal incluent des fonctions pour convertir une chaîne en majuscules ou minuscules, et leur utilisation est triviale. Quelle implémentation pascal utilisez-vous? – MartynA
Depuis que c'était fermé je ne pouvais pas ajouter un commentaire. J'ai des problèmes pour supprimer des lettres de chaque mot sans supprimer la première lettre, et avec la fin de la fonction "repeat" –
Je pense avoir trouvé comment effacer les lettres (du second au dernier) dans chaque mot, mais je continue je ne sais pas comment "terminer" la fonction de répétition –