WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Ziffern aus einer Zahl filtern und in Vektor schreiben

 

Suchender
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 13.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2013, 20:04     Titel: Ziffern aus einer Zahl filtern und in Vektor schreiben
  Antworten mit Zitat      
Hallo,

ich möchte Ziffern aus einer Zahl herausfiltern und dann in einen Zeilenvektor schreiben. In dem Beispiel unten ist f die gegebene Zahl und r der Zeilenvektor, in dem die Ziffern rein sollen.

Code:

r=zeros(1,5);
f=12345;
z=double(num2str(f));
for k=1:5
    r(k)=z(k);
end;
 


Am Ende möchte ich also den Vektor:

Code:

r=[ 1 2 3 4 5 ]
 


Ich bekomme aber
Code:

r=[49 50 51 52 53]
 


Was muss ich machen?
Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.04.2013, 23:50     Titel: Re: Ziffern aus einer Zahl filtern und in Vektor schreiben
  Antworten mit Zitat      
Hallo Suchender,

num2str() macht aus der Zahl einen String aus ASCII-Zeichen hierbei hat '0' den ASSCII-Code 48, und '1' die 49.
Nun schlage ich vor, mal kurz nachzudenken: Du hast r=[49 50 51 52 53], suchst aber nach r=[ 1 2 3 4 5 ]. Wie könnte man das schaffen?

Der Umweg über einen String ist nicht wirklich elegant. Schönner ist es, man bleibt bei Zahlen.
Code:

f = 12345;
nDigits = ceil(log10(f));
Digits = fix(rem(f ./ 10 .^ (nDigits - 1:-1:0), 10));

Das sieht bestimmt etwas verwirrend aus. Aber wenn man Stück für Stück begriffen hat, was es macht, ist es sehr logisch und man hat eine Menge Matlab gelernt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Suchender
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 13.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2013, 12:01     Titel:
  Antworten mit Zitat      
Danke, ich werde mich damit auseinandersetzen. Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.04.2013, 16:51     Titel:
  Antworten mit Zitat      
Hallo Suchender,

Wenn Du versprichst, dass Du Dich mit der FLOOR(REM())-Wurst auseinandersetzt, verrate ich noch den Trick, wie man dies so löst, dass Matlab genau das gleiche intern macht:
Code:
f = 12345;
z = sprintf('%d', f) - '0';

Das sieht zwar knuffig aus, aber wieso ein DOUBLE Vektor herauskommt, wenn man zwei CHAR-Vektoren (auch "Strings" genannt) von einander subtrahiert, ist nicht wirklich klar. Deswgen sollte dies einen Programmieranfänger eigentlich mehr verwirren. Macht es aber gar nicht, oder?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.04.2013, 08:39     Titel:
  Antworten mit Zitat      
Hallo,

Nach einer Rückfrage per PN:
Code:
z = sprintf('%d', 12345) - '0';

Dies macht folgendes:
1. SPRINTF wandelt die Zahl in den String '12345' um.
2. Ein String ist ein [1 x N] Vektor von Typ CHAR.
3. Die CHAR-Werte sind nach ASCII kodiert, also '0' ist 48 usw.
4. Wenn man in Matlab nun CHAR-Werte von einander abzieht, wird das Ergebnis aus Gründen der rückwärtskompatibility automatisch in den Typ DOUBLE umgewandelt. Dann:
Code:
'12345' - '0'
% Equivalent:
[49, 50, 51, 52, 53] - 48

5. CHAR sind eigentlich UINT16 Werte, die also statt nur ASCII von 0 bis 127 auch UNICODE Codes bis 2^16-1 darstellen können. Das spielt hier jedoch keine Rolle.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.