<?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[Zeichenketten nach muster durschsuchen(nur Zeiger)]]></title><description><![CDATA[<p>Ich bin gerade beim Thema Zeigern und soll eine Zeichenkette nach Mustern durchsuchen, ähnlich wie beim shell-kommando egrep.</p>
<p>Ich sollte noch erwähnen das ich Anfänger bin.</p>
<blockquote>
<p>main - gibt ab dem zweiten Parameter aus der Kommandozeile jeden<br />
Parameter auf einer eigenen Zeile aus, der das folgende Muster enthÃ¤lt:<br />
&quot;^b.*b1[0-9]&quot;<br />
Bei einer Kommandozeile der Form:<br />
prog -abb1ff b1999 b---b19$$ bb156ckkk9r aprogb<br />
soll ausgegeben werden:<br />
b---b19$$<br />
bb156ckkk9r</p>
</blockquote>
<p>Soweit bin ich schon.</p>
<pre><code class="language-cli">#include &lt;iostream&gt;
#include &lt;cstddef&gt;
#include &lt;cctype&gt;
using namespace std;

int main(int argc, char const **argv) {
const char **p(argv);
 for (int i(1); **p; i++) {
  if (**p[i][0] == 'b') {
   for (int j(1); **p[i][j]; j++) {
    if (**p[i][j]=='b' &amp;&amp;
        **p[i][j+1]=='1' &amp;&amp;
        isdigit(**p[i][j+2])){
        break;
        cout &lt;&lt; **p &lt;&lt; endl;
     }
    } else continue;
   } 
  } else continue;
 }
  return 0;
}
</code></pre>
<p>Ich kriege folgende Fehler, ich verstehe diesen zeigerkramm theoretisch, aber wenn es in die Praxis geht.</p>
<blockquote>
<p>invalid type argument of â€˜unary *â€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /><br />
Prog.cpp:26: error: invalid type argument of â€˜unary *â€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /><br />
Prog.cpp:27: error: invalid type argument of â€˜unary *â€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /><br />
Prog.cpp:28: error: invalid type argument of â€˜unary *â€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /><br />
Prog.cpp:29: error: invalid type argument of â€˜unary *â€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /><br />
Prog.cpp:33: error: expected â€˜}â€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /> before â€˜elseâ€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /><br />
Prog.cpp: At global scope:<br />
Prog.cpp:35: error: expected unqualified-id before â€˜elseâ€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /><br />
Prog.cpp:36: error: expected declaration before â€˜}â€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /> token</p>
</blockquote>
<p>Danke schon im vorrauss</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/287068/zeichenketten-nach-muster-durschsuchen-nur-zeiger</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 14:40:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287068.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 21 May 2011 16:52:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeichenketten nach muster durschsuchen(nur Zeiger) on Sat, 21 May 2011 16:52:24 GMT]]></title><description><![CDATA[<p>Ich bin gerade beim Thema Zeigern und soll eine Zeichenkette nach Mustern durchsuchen, ähnlich wie beim shell-kommando egrep.</p>
<p>Ich sollte noch erwähnen das ich Anfänger bin.</p>
<blockquote>
<p>main - gibt ab dem zweiten Parameter aus der Kommandozeile jeden<br />
Parameter auf einer eigenen Zeile aus, der das folgende Muster enthÃ¤lt:<br />
&quot;^b.*b1[0-9]&quot;<br />
Bei einer Kommandozeile der Form:<br />
prog -abb1ff b1999 b---b19$$ bb156ckkk9r aprogb<br />
soll ausgegeben werden:<br />
b---b19$$<br />
bb156ckkk9r</p>
</blockquote>
<p>Soweit bin ich schon.</p>
<pre><code class="language-cli">#include &lt;iostream&gt;
#include &lt;cstddef&gt;
#include &lt;cctype&gt;
using namespace std;

int main(int argc, char const **argv) {
const char **p(argv);
 for (int i(1); **p; i++) {
  if (**p[i][0] == 'b') {
   for (int j(1); **p[i][j]; j++) {
    if (**p[i][j]=='b' &amp;&amp;
        **p[i][j+1]=='1' &amp;&amp;
        isdigit(**p[i][j+2])){
        break;
        cout &lt;&lt; **p &lt;&lt; endl;
     }
    } else continue;
   } 
  } else continue;
 }
  return 0;
}
</code></pre>
<p>Ich kriege folgende Fehler, ich verstehe diesen zeigerkramm theoretisch, aber wenn es in die Praxis geht.</p>
<blockquote>
<p>invalid type argument of â€˜unary *â€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /><br />
Prog.cpp:26: error: invalid type argument of â€˜unary *â€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /><br />
Prog.cpp:27: error: invalid type argument of â€˜unary *â€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /><br />
Prog.cpp:28: error: invalid type argument of â€˜unary *â€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /><br />
Prog.cpp:29: error: invalid type argument of â€˜unary *â€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /><br />
Prog.cpp:33: error: expected â€˜}â€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /> before â€˜elseâ€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /><br />
Prog.cpp: At global scope:<br />
Prog.cpp:35: error: expected unqualified-id before â€˜elseâ€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /><br />
Prog.cpp:36: error: expected declaration before â€˜}â€<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2122.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--trade_mark"
      title=":trade_mark:"
      alt="™"
    /> token</p>
</blockquote>
<p>Danke schon im vorrauss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066836</guid><dc:creator><![CDATA[gast23]]></dc:creator><pubDate>Sat, 21 May 2011 16:52:24 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenketten nach muster durschsuchen(nur Zeiger) on Sat, 21 May 2011 17:00:07 GMT]]></title><description><![CDATA[<p>Ich verstehe die Aufgabenstellung nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066840</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 21 May 2011 17:00:07 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenketten nach muster durschsuchen(nur Zeiger) on Sat, 21 May 2011 17:00:19 GMT]]></title><description><![CDATA[<p>Mit deinem Zeiger-Gebastel blicke ich auch nicht mehr durch - da hast du vermutlich einige Dereferenzierungen zu viel oder zu wenig eingebaut. (und die Zeilen in der Fehlermeldung passen auch nicht zu deinem Code)</p>
<p>Ich schlage vor, du fängst nochmal ganz von vorne an. Als erstes überlegst du dir, wie du prüfen kannst, ob ein String deinem Muster entspricht. Dann kannst du die Prüfung in einer Schleife auf alle argv-Elemente anwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2066841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2066841</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 21 May 2011 17:00:19 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenketten nach muster durschsuchen(nur Zeiger) on Sun, 22 May 2011 09:19:35 GMT]]></title><description><![CDATA[<p>ich glaube er will reguläre ausdrücke schreiben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067053</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sun, 22 May 2011 09:19:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenketten nach muster durschsuchen(nur Zeiger) on Sun, 22 May 2011 10:19:54 GMT]]></title><description><![CDATA[<p>genau, ich möchte nach Regulären Ausdrücken(Muster: *<em>^b.<em>b1[0-9</em></em> ) suchen Block-/Wortweise, und dann ausgeben die schwierigkeit ist das man dass mit Zeigern machen soll.</p>
<p>Ich habe auch die lösung, aber da verwendet er doppelte Dereferenzierungsoperatoren(**), da blick ich dann auch nicht mehr durch.</p>
<p>Mein problem ist das ich nicht verstehe wie ich (wenn mann sich als array vorstellt) in den &quot;zeilen&quot; danach suchen soll, in der lösung regelt er das mit Pointern (**pp), hier hab ich das mit den 2 Addressop.*p[][] versucht das scheint aber nicht zu klappen, deswegen auch die fehlermeldungen.<br />
Wie würdet Ihr das lösen?</p>
<p>Die lösung sieht ungefähr so aus:</p>
<pre><code class="language-cpp">int main (int argc, char** argv){

for(char const**pp(argv+1); *pp; ++pp){ // argv[i] wird durchlaufen, glaube ich
 char const *p(*pp); // fragt mich nicht  :confused: 
 if(*p != 'b')continue; 
// argv[1][0] ob 1. zeichen ein 'b' wenn nicht zuück zu for-S.
 ++p; // nächste zeichen (argv[i][i+1])
 for(; *p; ++p){ // innnere argv (zeilen)
  if(*p == 'b' &amp;&amp; *(p+1) == '1' &amp;&amp; isdigit(*(p+2)))break; // Muster
 }
 if(!*p)continue; // Zeichenkette länger dann weiter bei for-S.
 cout &lt;&lt; *pp &lt;&lt; endl; // ausgabe
}
return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2067066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067066</guid><dc:creator><![CDATA[gast23]]></dc:creator><pubDate>Sun, 22 May 2011 10:19:54 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenketten nach muster durschsuchen(nur Zeiger) on Sun, 22 May 2011 10:30:04 GMT]]></title><description><![CDATA[<p>Ich würde mir vermutlich etwas mit Boost::Spirit oder Boost::Regex zusammenbauen, um die Eingaben zu parsen. Wenn du nur nach einem fest verdrahtetem Muster suchen mußt, würde ich nicht dem regulären Ausdruck suchen, sondern mir ansehen, wie eine Zeichenfolge aussehen muß, um das Muster zu erfüllen (hier: beginnt mit b und enthält ein weiteres b gefolgt von einigen Zahlen).</p>
<p>gast23 schrieb:</p>
<blockquote>
<p>genau, ich möchte nach Regulären Ausdrücken(Muster: *<em>^b.<em>b1[0-9</em></em> ) suchen Block-/Wortweise, und dann ausgeben die schwierigkeit ist das man dass mit Zeigern machen soll.</p>
</blockquote>
<p>Wieso sollte das eine zusätzliche Schwierigkeit sein? (außer der Tatsache, daß damit Lösungen auf der Basis std::string wegfallen)</p>
<p>PS: Du lernst nicht zufällig aus einem J.W.-Buch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067068</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 22 May 2011 10:30:04 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenketten nach muster durschsuchen(nur Zeiger) on Sun, 22 May 2011 11:34:32 GMT]]></title><description><![CDATA[<p>Der Code ist fürchterlich formatiert und enthält Sprunganweisungen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067089</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sun, 22 May 2011 11:34:32 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenketten nach muster durschsuchen(nur Zeiger) on Sun, 22 May 2011 12:59:12 GMT]]></title><description><![CDATA[<p>nein, ich lerne von keinem buch, aber vielleicht hat mein Prof die aufgaben aus einem Buch, ist halt sehr Linux lastig.</p>
<p>Kann mir den jemand wenigstens erklären wie das funktioniert, ohne die Addressoperatoren zu verwenden die Zeiger zeigen ja auf <strong>argv[1][0]</strong>, aber wo zeigt **<strong>pp</strong> hin?</p>
<p>Eigentlich doch auch auf argv[1][0], wie kann er dann die Spalten durchlaufen in dem er <em>pp++</em> schreibt/erhöht und mit <em>p++</em> die Zeilen, die zeigen doch auf das gleiche <strong>char const *p(**pp</strong>), das kapier ich einfach nicht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067105</guid><dc:creator><![CDATA[gast23]]></dc:creator><pubDate>Sun, 22 May 2011 12:59:12 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenketten nach muster durschsuchen(nur Zeiger) on Sun, 22 May 2011 14:08:00 GMT]]></title><description><![CDATA[<p>*p kannst du umschreiben in p[0]<br />
**p ist äquivalent zu p[0][0]</p>
<p>Nebenbei bemerkt ist dein Code ill-formed und dürfte nicht kompilieren:</p>
<pre><code>int main (int argc,[b] char** argv[/b]){

for([b]char const**pp(argv+1)[/b];...
</code></pre>
<p>Ich verweigere mich allerdings der weiteren Diskussion, weil ich diesen furchtbaren Klammerfetischismus nicht ausstehen kann :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067119</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 22 May 2011 14:08:00 GMT</pubDate></item></channel></rss>