Comment obtenir le premier élément dans une chaîne de caractères?
J'essaie de trouver un moyen de vérifier une chaîne de caractères du premier élément si c'est un nombre ou non.
if not(myString[0] in [0..9]) then //Do something
Le problème est que j'obtiens une erreur "l'Élément 0 inaccessible utiliser "Longueur" ou "SetLength"
Une autre façon est venu à ma tête de mon C-comme exprieince - convertir le premier élément de la chaîne de char et de vérifier le char,mais il n'y a pas de différence dans les erreurs de compilation.
if not(char(myString[0]) in [0..9]) then //Do something
Comment dois-je accomplir?
BTW: le type de retour de l'expression machaine[1] est un Char afin de faire un cast explicite ne sert à rien ici
OriginalL'auteur Ivan Prodanov | 2009-07-17
Vous devez vous connecter pour publier un commentaire.
Les chaînes sont de base 1:
Juste un problème maintenant "des types incompatibles - string et integer". Si j'utilise StrToInt et la chaîne n'est pas un entier, alors une exception est levée et tous cette vérification est inutile.Pourriez-vous suggérer une meilleure façon? +1 d'ailleurs. 🙂
John, l'utilisation TryStrToInt ensuite.
Regardez encore TOndrej du code: Il devrait y avoir des guillemets simples autour de l' '0'..'9'
Dans les versions modernes de Delphi chaîne est de base 1 uniquement pour Windows plate-forme, pour les plateformes mobiles chaîne est basée sur 0. Cela signifie que suggéré code est compatible avec la plate-forme Windows.
OriginalL'auteur Ondrej Kelle
Pascal et Delphi index chaîne de 1. C'est un héritage de l'époque où zéro octet contenu de la longueur, tout en suivant 255 (indice de 1 à 255) contenait des caractères réels.
Joel Spolsky écrit très bon article sur les problèmes de chaînes:
http://www.joelonsoftware.com/articles/fog0000000319.html
Le "Spolsky" l'article parle de la mise en œuvre de Pascal chaînes de caractères en C, sans aucune prise en charge du compilateur. Les problèmes ne sont pas pertinents pour les langues qui disposent d'un soutien pour elle.
van de Voort: je crains que vous avez complètement raté le point de Joël article.
OriginalL'auteur smok1
Delphi chaînes utiliser un index basé sur 1, il suffit donc de réécrire
Également prendre note des guillemets autour de la
0..9
, sinon vous seriez comparaison des caractères en nombres entiers.OriginalL'auteur Oliver Giesen
Nous devrions garder à l'esprit certaines choses:
AnsiString
(1 octet par caractère) etWideString
dans de nouvelles versions (2 octets par caractère).AnsiChar
, mais ne prend pas en charge l'ensemble deWideChar
.Donc, si nous voulons écrire un code compatible avec toutes les versions de Delphi, alors il devrait être quelque chose comme ceci:
OriginalL'auteur Andrei Galatyn
Si vous êtes à l'aide de Delphi 2009, le TCharacter classe de Caractère.pas a des fonctions comme l'appel isdigit pour vous aider à simplifier ces types d'opérations.
Une fois que vous avez corrigé l'indexation, bien sûr. 🙂
OriginalL'auteur Bruce McGee
Avec les mises à jour ultérieures de Delphi code mobile, la corde en bas de l'indice est passée de 0 à 1. Lors de la compilation d'anciens programmes, ils compiler et exécuter correctement à l'aide de 0 de l'indice de départ. Les Programmes créés avec le plus tard IDE produire une erreur. Lorsque vous avez des mélanges, la vie devient complexe!
Il serait bon d'être en mesure de prendre un vieux programme et de raconter l'IDE que vous voulez qu'il mis à jour (peut-être que cela permettrait de fixer d'autres choses, comme les polices d'obtenir brouillés lorsque vous répondez à un appel téléphonique!) mais il serait bon d'obtenir des choses cohérentes!
OriginalL'auteur Chester
La façon la plus simple de vérifier pour voir si le premier caractère de la chaîne est un nombre entier, puis l'expédition:
Vrai, mais si vous voulez la loi de la valeur, alors il nécessaire à l'aide de StrtoInt. Si vous utilisez TryStrToInt, non seulement vous pouvez vérifier pour voir si ses un certain nombre, vous avez alors le nombre à utiliser ensuite.
OriginalL'auteur skamradt
J'utilise une fonction d'utilité de tester l'ensemble de la chaîne:
Le code ci-dessus est pour Delphi les versions antérieures à 2007. En 2007 et en 2009, vous pouvez modifier la variable de type entier j'ai un caractère c, et l'utilisation de c en Valeur de la place.
De test pour les nombres entiers, de supprimer le". " à partir du jeu de caractères à tester.
OriginalL'auteur Ken White
C'est incorrect. ISO cordes et plus Pascal est également mis à un. C'est juste une convention générale, et autant que je sache, le s[0] chose est le résultat étant vacants, et bon marché pour code dans l'UCSD interpréteur de bytecode. Mais ce dernier est peu avant mon temps, de sorte que mon devinettes.
Qu'il résulte de l'Pascal capacité à avoir des limites supérieure et inférieure, qui prévoit plus de typesafety accéder à des tableaux.
Vraiment vieux Pascal chaînes (jusqu'au début des années quatre-vingt) les chaînes de caractères ont été encore pires que C ceux btw. Plusieurs conventions ont été utilisés, mais tous étaient basés sur des tableaux statiques (comme au début C), mais ils étaient généralement de l'espace rembourré, de sorte que vous avait de rétro-analyse à partir de la fin jusqu'les espaces clos.
(supprimé l'héritage de la balise, depuis le 1 est pas l'héritage. Accéder s[0], la longueur EST de l'héritage, mais ce n'est pas ce que la question est à propos)
OriginalL'auteur Marco van de Voort
N'oubliez pas la citation entre les chiffres du numéro.
OriginalL'auteur nickson