<?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[Implementierung von Getline so korrekt? Alternativen?]]></title><description><![CDATA[<p>Hallo Ihr Lieben.</p>
<p>Ich nutze seit der &quot;Umstellung&quot; auf STL oft die Funktion getline also alternative zu der C-Funktion strtok.<br />
Dabei duchsuche ich einen String nach bestimmten Zeichen und teile diesen dann entsprechend auf.</p>
<p>Da sieht so aus:</p>
<pre><code>std::istringstream st;	
st.clear();	
st.str(&quot;&quot;);
st.str(com_pers);

(............)

zw_kurz=&quot;&quot;;
							getline(st,zw_kurz,'#');
							if(zw_kurz.empty())zw_kurz=&quot;??&quot;;
							ptr_tapl[i].ptr_ma_tapl[u-5].t_kurz.append(zw_kurz);	//Woplan

							getline(st,zw_fvor,'/');
							if(zw_fvor.empty())zw_fvor=&quot;??&quot;;
							ptr_tapl[i].ptr_ma_tapl[u-5].t_fehlv.append(zw_fvor);	//Fehl Vormittag

							getline(st,zw_fnach,'#');
							if(zw_fnach.empty())zw_fnach=&quot;??&quot;;
							ptr_tapl[i].ptr_ma_tapl[u-5].t_fehln.append(zw_fnach);	//Fehl Nachmittag

							getline(st,zw_erlaubt,'|');
							if(zw_erlaubt.empty())zw_erlaubt=&quot;??&quot;;
							ptr_tapl[i].ptr_ma_tapl[u-5].t_erlaubt.append(zw_erlaubt);
</code></pre>
<p>Jetzt stellt sich mir die Frage ob diese implementierung so korrekt und anwendbar ist oder obs da etwas &quot;besseres&quot; gibt.</p>
<p>Es gibt ja noch string.find() welches ich auch oft benutze,aber getline ist geschmeidiger und ich brauche weniger Code.</p>
<p>Die Frage ist ob sich die Funktion so verwenden lässt.<br />
Ich habe das so schon im produktiv Einsatz nur möchte ich Überraschungen vermeiden...</p>
<p>Was meint Ihr dazu?</p>
<p>Grüße Mondmann</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197725/implementierung-von-getline-so-korrekt-alternativen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 09:29:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197725.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Nov 2007 08:12:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Implementierung von Getline so korrekt? Alternativen? on Wed, 14 Nov 2007 08:12:13 GMT]]></title><description><![CDATA[<p>Hallo Ihr Lieben.</p>
<p>Ich nutze seit der &quot;Umstellung&quot; auf STL oft die Funktion getline also alternative zu der C-Funktion strtok.<br />
Dabei duchsuche ich einen String nach bestimmten Zeichen und teile diesen dann entsprechend auf.</p>
<p>Da sieht so aus:</p>
<pre><code>std::istringstream st;	
st.clear();	
st.str(&quot;&quot;);
st.str(com_pers);

(............)

zw_kurz=&quot;&quot;;
							getline(st,zw_kurz,'#');
							if(zw_kurz.empty())zw_kurz=&quot;??&quot;;
							ptr_tapl[i].ptr_ma_tapl[u-5].t_kurz.append(zw_kurz);	//Woplan

							getline(st,zw_fvor,'/');
							if(zw_fvor.empty())zw_fvor=&quot;??&quot;;
							ptr_tapl[i].ptr_ma_tapl[u-5].t_fehlv.append(zw_fvor);	//Fehl Vormittag

							getline(st,zw_fnach,'#');
							if(zw_fnach.empty())zw_fnach=&quot;??&quot;;
							ptr_tapl[i].ptr_ma_tapl[u-5].t_fehln.append(zw_fnach);	//Fehl Nachmittag

							getline(st,zw_erlaubt,'|');
							if(zw_erlaubt.empty())zw_erlaubt=&quot;??&quot;;
							ptr_tapl[i].ptr_ma_tapl[u-5].t_erlaubt.append(zw_erlaubt);
</code></pre>
<p>Jetzt stellt sich mir die Frage ob diese implementierung so korrekt und anwendbar ist oder obs da etwas &quot;besseres&quot; gibt.</p>
<p>Es gibt ja noch string.find() welches ich auch oft benutze,aber getline ist geschmeidiger und ich brauche weniger Code.</p>
<p>Die Frage ist ob sich die Funktion so verwenden lässt.<br />
Ich habe das so schon im produktiv Einsatz nur möchte ich Überraschungen vermeiden...</p>
<p>Was meint Ihr dazu?</p>
<p>Grüße Mondmann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402884</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Wed, 14 Nov 2007 08:12:13 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von Getline so korrekt? Alternativen? on Wed, 14 Nov 2007 08:23:13 GMT]]></title><description><![CDATA[<p>Also ich finde die string::find()-Familie allgemeiner verwendbar (vor allem, weil man dort auch aus mehrere Zeichen parallel suchen kann - find_first_of()). Aber der Ansatz sieht nicht schlecht aus.</p>
<p>(allerdings solltest du sicherstellen, daß alle Trennzeichen in der richtigen Reihenfolge im Eingabestring vorkommen)</p>
<p>PS: <code>str.clear();</code> (der Stream wurde eine Zeile darüber neu erstellt, ist also garantiert &quot;sauber&quot;) und <code>str.str(&quot;&quot;);</code> (du überschreibst den Wert sofort mit den korrekten Daten) sind übrigens unnötig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402892</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 14 Nov 2007 08:23:13 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von Getline so korrekt? Alternativen? on Wed, 14 Nov 2007 08:42:30 GMT]]></title><description><![CDATA[<p>Alles klar.</p>
<p>Ja das ist unnötig, das sehe ich ein.</p>
<p>Normalerweise ist sichergestellt, daß die Zeichen in der richtigen Reihenfolge kommen.<br />
Nur habe ich ab und zu dern falschen String am falschen Platz, weiß aber noch nicht woran es liegt.</p>
<p>Ich sehe den Vorteil in getline, daß ich mir Code sparen kann.<br />
getline macht an der Stelle des zuletzt gefundenen Zeichens weiter und sucht das nächste.</p>
<p>Mit find() mus ich mir immer die Position merken und ab dieser weitersuchen.<br />
Geht auch,aber mit mehr Code...</p>
<p>Wie meinst du das mit &quot;mehrere Zeichen Parallel&quot;?</p>
<p>Noch etwas anderes.<br />
Gibt es denn eine Funktion mit der ich die Anzahl eines bestimmten Zeichens bestimmen kann in einem std::string?<br />
Bisher mache ich das immer in einer for-Schleife.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402898</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Wed, 14 Nov 2007 08:42:30 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von Getline so korrekt? Alternativen? on Wed, 14 Nov 2007 08:46:49 GMT]]></title><description><![CDATA[<p>Mondmann schrieb:</p>
<blockquote>
<p>Nur habe ich ab und zu dern falschen String am falschen Platz, weiß aber noch nicht woran es liegt.</p>
</blockquote>
<p>Debugging?</p>
<blockquote>
<p>Ich sehe den Vorteil in getline, daß ich mir Code sparen kann.<br />
getline macht an der Stelle des zuletzt gefundenen Zeichens weiter und sucht das nächste.</p>
<p>Mit find() mus ich mir immer die Position merken und ab dieser weitersuchen.<br />
Geht auch,aber mit mehr Code...</p>
</blockquote>
<p>Klar, das ist ein eindeutiger Vorteil.</p>
<blockquote>
<p>Wie meinst du das mit &quot;mehrere Zeichen Parallel&quot;?</p>
</blockquote>
<p>Mit getline() kannst du nur ein einziges Trennzeichen für den nächsten Teilstring angeben, find_first_of() kannst du mehrere Zeichen übergeben und er liefert das erste davon, das er findet (z.B. findet <code>str.find_first_of(&quot; \t\n&quot;)</code> die Position des ersten Whitespace. Wenn ich strtok() nachbauen müsste, würde ich wohl gerade deswegen lieber die String-Methoden nutzen und in einer eigenen Hilfsklasse unterbringen:</p>
<pre><code class="language-cpp">//ungetestet
class string_splitter
{
  string m_data;
  size_t m_pos;
public:
  string_splitter(const string&amp; data) : m_data(data),m_pos(0) {}
  string operator()(const string&amp; delim)
  {
    size_t start = m_pos, ende = m_data.find_first_of(delim,m_pos);
    m_pos = data.find_first_not_of(delim,ende);
    return m_data.substr(start,ende);
  }
};

...
string_splitter split(com_pers);

zw_kurz = split(&quot;#&quot;);
if(zw_kurz.empty())zw_kurz=&quot;??&quot;;
ptr_tapl[i].ptr_ma_tapl[u-5].t_kurz.append(zw_kurz);    //Woplan
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1402909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402909</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 14 Nov 2007 08:46:49 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von Getline so korrekt? Alternativen? on Wed, 14 Nov 2007 09:03:56 GMT]]></title><description><![CDATA[<p>Klar debugging..schon dabei.</p>
<p>Danke für Dein Beispiel, werds mir mal genauer ansehen.</p>
<p>Mein erstes Beispiel ist in einer for-Schleife und wird mehrere hundert Male durchlaufen.<br />
Den String den ich durchsuche ist, je nachdem, 10K groß!<br />
Wäre Dein Beispiel dann auch noch verwendbar?<br />
Die Zeichenabfolge ist immer gleich und die Teilstrings werden Zwischengespeichert...</p>
<p>Die Funktion count() habe ich in der msdn gefunden..nur ob die schneller ist als die for schleife?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402915</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Wed, 14 Nov 2007 09:03:56 GMT</pubDate></item></channel></rss>