<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Auftrennen von string an Zeichen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte einen std::string am _ersten_ Vorkommen des Gleichheitszeichens auftrennen und die resultierenden Teile in zwei char-Arrays schreiben.</p>
<p>Habe dazu folgenden Code geschrieben, der auch funktioniert:</p>
<pre><code>while(std::getline(f,l)) {
	char key[TI_SYSCFG_MAX_KEY_LEN];
	char val[TI_SYSCFG_MAX_VAL_LEN];
	int pos_eq = l.find_first_of('=');
	if(pos_eq == std::string::npos)
		continue;
	// Copy configuration key
	memcpy(key, l.c_str(), pos_eq);
	key[pos_eq] = '\0';
	// Copy configuration value
	strcpy(val, l.c_str() + pos_eq + 1);

        // Test
	std::cout &lt;&lt; key &lt;&lt; std::endl;
	std::cout &lt;&lt; val &lt;&lt; std::endl;
}
</code></pre>
<p>Kann man das so lassen? Ist das &quot;hübsches&quot; C++? Lässt sich das performancetechnisch optimieren?</p>
<p>Thx</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/317742/auftrennen-von-string-an-zeichen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Jul 2026 18:49:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317742.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Jun 2013 09:34:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Auftrennen von string an Zeichen on Wed, 19 Jun 2013 09:34:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte einen std::string am _ersten_ Vorkommen des Gleichheitszeichens auftrennen und die resultierenden Teile in zwei char-Arrays schreiben.</p>
<p>Habe dazu folgenden Code geschrieben, der auch funktioniert:</p>
<pre><code>while(std::getline(f,l)) {
	char key[TI_SYSCFG_MAX_KEY_LEN];
	char val[TI_SYSCFG_MAX_VAL_LEN];
	int pos_eq = l.find_first_of('=');
	if(pos_eq == std::string::npos)
		continue;
	// Copy configuration key
	memcpy(key, l.c_str(), pos_eq);
	key[pos_eq] = '\0';
	// Copy configuration value
	strcpy(val, l.c_str() + pos_eq + 1);

        // Test
	std::cout &lt;&lt; key &lt;&lt; std::endl;
	std::cout &lt;&lt; val &lt;&lt; std::endl;
}
</code></pre>
<p>Kann man das so lassen? Ist das &quot;hübsches&quot; C++? Lässt sich das performancetechnisch optimieren?</p>
<p>Thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332398</guid><dc:creator><![CDATA[auftrenni]]></dc:creator><pubDate>Wed, 19 Jun 2013 09:34:13 GMT</pubDate></item><item><title><![CDATA[Reply to Auftrennen von string an Zeichen on Wed, 19 Jun 2013 09:37:29 GMT]]></title><description><![CDATA[<p>Warum char-Arrays? Warum auftrennen? Was, wenn die Zahl der Zeichen zu groß ist oder kein Gleichheitszeichen drin ist? Kontext?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332400</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 19 Jun 2013 09:37:29 GMT</pubDate></item><item><title><![CDATA[Reply to Auftrennen von string an Zeichen on Wed, 19 Jun 2013 09:44:18 GMT]]></title><description><![CDATA[<blockquote>
<p>Was, wenn die Zahl der Zeichen zu groß ist</p>
</blockquote>
<p>Ja richtig.</p>
<p>@auftrenni :<br />
Wenn dein Wert, welcher du in val speichern möchtest größer ist als TI_SYSCFG_MAX_VAL_LEN Zeichen, knallt es. Nicht schön.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332403</guid><dc:creator><![CDATA[Bitte ein Bit]]></dc:creator><pubDate>Wed, 19 Jun 2013 09:44:18 GMT</pubDate></item><item><title><![CDATA[Reply to Auftrennen von string an Zeichen on Wed, 19 Jun 2013 09:46:00 GMT]]></title><description><![CDATA[<p>Naja es sollen key-Value Paare in eine HashTable-Datenstruktur überführt werden. Ich wollte die char-Arrays (key, value) dann entsprechend dort ablegen, um auf Konfigwerte effizient zugreifen zu können.</p>
<p>Wenn kein = Zeichen vorhanden, wird doch mit der Abfrage im Code die Zeile ignoriert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332404</guid><dc:creator><![CDATA[auftrenni]]></dc:creator><pubDate>Wed, 19 Jun 2013 09:46:00 GMT</pubDate></item><item><title><![CDATA[Reply to Auftrennen von string an Zeichen on Wed, 19 Jun 2013 09:47:11 GMT]]></title><description><![CDATA[<p>Yep, ich frag noch Position von = (Prüfung Länge Key) und String-Länge minus Position von = ab (Prüfung Länge Value), danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332406</guid><dc:creator><![CDATA[auftrenni]]></dc:creator><pubDate>Wed, 19 Jun 2013 09:47:11 GMT</pubDate></item><item><title><![CDATA[Reply to Auftrennen von string an Zeichen on Wed, 19 Jun 2013 10:03:34 GMT]]></title><description><![CDATA[<p>Willst du dir denn nicht mehr Mühe geben beim Parsen? Was, wenn in der Zeile</p>
<pre><code>value = 5
</code></pre>
<p>steht? Dann speicherst du &quot;value &quot; und &quot; 5&quot; ab. Gewünscht? Ich würde beim Parsen eher nicht so extrem auf Geschwindigkeit optimieren. Jedenfalls nicht auf Kosten einer intuitiven Programmsemantik.</p>
<p>Ansonsten winzige Detailverbesserungen:<br />
- data() statt c_str() <em>könnte</em> auf einigen Implementierungen ein paar Takte schneller sein.<br />
- Ebenso memcpy statt strcpy. Die Länge ist schließlich bekannt<br />
- Sieht derzeit so aus, als ob du die Arrays später noch einmal kopieren müsstest. Könnte man sicher geschickter machen. Hier wäre sogar ein std::string möglicherweise flotter, da er gemoved werden könnte.<br />
- A propos Ressourcenwiederverwertung: Du könntest mit std::string sogar den gelesenen String weiterverwenden, wenn du für den key einfach den String kürzt und dann in die Datenstruktur move'st.</p>
<p>Sieht insgesamt sehr nach der berühmten premature optimization aus. Was ist denn der typische erwartete Anwendungsfall, was Länge der Zeichenketten und Anzahl der Einträge angeht? Wie oft wird zugegriffen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332412</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 19 Jun 2013 10:03:34 GMT</pubDate></item><item><title><![CDATA[Reply to Auftrennen von string an Zeichen on Wed, 19 Jun 2013 10:11:55 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>- data() statt c_str() <em>könnte</em> auf einigen Implementierungen ein paar Takte schneller sein.</p>
</blockquote>
<p>Ab C++11 müssen die Funktionen exakt das selbe machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332415</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Wed, 19 Jun 2013 10:11:55 GMT</pubDate></item><item><title><![CDATA[Reply to Auftrennen von string an Zeichen on Wed, 19 Jun 2013 10:18:27 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Willst du dir denn nicht mehr Mühe geben beim Parsen? Was, wenn in der Zeile</p>
<pre><code>value = 5
</code></pre>
<p>steht? Dann speicherst du &quot;value &quot; und &quot; 5&quot; ab. Gewünscht? Ich würde beim Parsen eher nicht so extrem auf Geschwindigkeit optimieren.</p>
</blockquote>
<p>Das muss auf einem eingebettetem System mit wenig Speicher laufen. Sonst hätte ich das auf jeden Fall aufgebohrt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332416</guid><dc:creator><![CDATA[auftrenni]]></dc:creator><pubDate>Wed, 19 Jun 2013 10:18:27 GMT</pubDate></item><item><title><![CDATA[Reply to Auftrennen von string an Zeichen on Wed, 19 Jun 2013 10:20:39 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Willst du dir denn nicht mehr Mühe geben beim Parsen? Was, wenn in der Zeile</p>
<pre><code>value = 5
</code></pre>
<p>steht? Dann speicherst du &quot;value &quot; und &quot; 5&quot; ab. Gewünscht? Ich würde beim Parsen eher nicht so extrem auf Geschwindigkeit optimieren. Jedenfalls nicht auf Kosten einer intuitiven Programmsemantik.</p>
<p>Ansonsten winzige Detailverbesserungen:<br />
- data() statt c_str() <em>könnte</em> auf einigen Implementierungen ein paar Takte schneller sein.<br />
- Ebenso memcpy statt strcpy. Die Länge ist schließlich bekannt<br />
- Sieht derzeit so aus, als ob du die Arrays später noch einmal kopieren müsstest. Könnte man sicher geschickter machen. Hier wäre sogar ein std::string möglicherweise flotter, da er gemoved werden könnte.<br />
- A propos Ressourcenwiederverwertung: Du könntest mit std::string sogar den gelesenen String weiterverwenden, wenn du für den key einfach den String kürzt und dann in die Datenstruktur move'st.</p>
<p>Sieht insgesamt sehr nach der berühmten premature optimization aus. Was ist denn der typische erwartete Anwendungsfall, was Länge der Zeichenketten und Anzahl der Einträge angeht? Wie oft wird zugegriffen?</p>
</blockquote>
<p>Länge Zeichenkette ist eigentlich stets unter 256.<br />
Zugriffe nur zu Beginn bei Initialisierung, vielleicht 30 Stück wenns hochkommt.</p>
<p>Danke für deine Tipps, ich werde nun memcpy einsetzen und mir nochmal über die char-Buffer Gedanekn machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332417</guid><dc:creator><![CDATA[auftrenni]]></dc:creator><pubDate>Wed, 19 Jun 2013 10:20:39 GMT</pubDate></item><item><title><![CDATA[Reply to Auftrennen von string an Zeichen on Wed, 19 Jun 2013 11:03:36 GMT]]></title><description><![CDATA[<p>auftrenni schrieb:</p>
<blockquote>
<p>Das muss auf einem eingebettetem System mit wenig Speicher laufen. Sonst hätte ich das auf jeden Fall aufgebohrt.</p>
</blockquote>
<p>Das heißt, du verschwendest lieber für jeden Eintrag (256-Länge) Zeichen anstatt genau passende Strings (oder vielleicht eine eigene dynamische Klasse mit nur zwei Pointern statt drei) zu nehmen?<br />
Ich verstehe auch nicht, was die Speichermenge mit meinem Vorschlag zu tun hat, der in-place gewesen wäre. Es war vor allen eine semantische Frage.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2332431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2332431</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 19 Jun 2013 11:03:36 GMT</pubDate></item></channel></rss>