C/C++
ご観覧有難うございます。
今回質問したい内容は 変数に入っている中の 特定の文字と文字の間の文字を取得したいといことになります。
例としては &k3e:7=12345&k87e: この "&k3e:7=" と "&k87e:" の間の文字を取りたいと思います。
毎回間の文字数は変わりますが、特定の文字は変わりません。
経験不足で申し訳ないのですが、ソースコードなどを教えて頂けると幸いでございます。 宜しくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
C
1#include <stdio.h> 2 3int get(const char *s, char *t) 4{ 5 char c; 6 if (sscanf(s, "&k3e:7=%[^&]&k87e%c", t, &c) == 2 && c == ':') return 1; 7 *t = '\0'; 8 return 0; 9} 10 11int main(void) 12{ 13 char buf[1024]; 14 if (get("&k3e:7=12345&k87e:", buf)) puts(buf); 15 if (get("&k3e:7=1234567&k87e:", buf)) puts(buf); 16 if (get("&k3e:7=abcdefg&k87e:", buf)) puts(buf); 17}
ちょっと問題がありますが。
追記
大きな問題がありました。
&k3e:7= が先頭にあるわけでなないのですね。
勘違いしていました。すみません。
追記2
sscanf を使うのには問題があったので、strstr を使う方法を示します。
C
1#include <stdio.h> 2#include <string.h> // strstr, memcpy 3 4int get(const char *s, char *t) 5{ 6 const char *p = strstr(s, "&k3e:7="); 7 if (!p) return 0; 8 p += 7; // 7 = strlen("&k3e:7="); 9 const char *q = strstr(p, "&k87e:"); 10 if (!q) return 0; 11 int n = q - p; 12 memcpy(t, p, n); 13 t[n] = '\0'; 14 return 1; 15} 16 17int main(void) 18{ 19 char buf[1024]; 20 if (get("&k3e:7=12345&k87e:", buf)) puts(buf); 21 if (get("&k3e:7=1234567&k87e:", buf)) puts(buf); 22 if (get("&k3e:7=abc&def&k87e:", buf)) puts(buf); 23}
投稿2020/05/17 03:42
編集2020/05/17 12:58総合スコア8224
0
こんなんで。
C++
1#include<iostream> 2#include <string> 3 4int main(void) { 5 using namespace std; 6 string str = "&k3e:7=12345&k87e:"; 7 string from = "&k3e:7="; 8 string to = "&k87e:"; 9 string::size_type spos = str.find(from); 10 if ( spos != string::npos ) { 11 string::size_type epos = str.find(to, spos+from.length()); 12 if ( epos != string::npos ) { 13 string between = str.substr(spos+from.length(), epos - spos - from.length()); 14 cout << between << endl; 15 } 16 } 17}
投稿2020/05/17 00:04
総合スコア16612
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
C言語関数辞典の、sscanf(),strchr(),strstr()あたりを参考に。
自力で解いて、詰まったら質問に追記して下さい。
→推奨していない質問
BAをもらっちゃいましたが・・・**こんな方法も有る!**という事で、参考になれば・・・
c
1#include <stdio.h> 2#include <string.h> 3 4int main( ) 5{ 6 const char src[] = "&k3e:7=12345&k87e:"; 7 char value[10]; 8 9 if(sscanf(src, "&k3e:7=%[^&]&k87e:", value) != 1) { 10 return 1; 11 } 12 puts(value); 13 14 return 0; 15}
usr ~/Project/test % ./a.out
12345
usr ~/Project/test % echo $?
0
c
1#include <stdio.h> 2#include <string.h> 3 4int main( ) 5{ 6 const char src[] = "abc &k3e:7=123&5&k87e:"; 7 char value[16]; 8 9 const char *sp = strstr(src,"&k3e:7="); 10 11 if(sscanf(sp, "&k3e:7=%s", value) != 1) { 12 return 1; 13 } 14 *strstr(value, "&k87e:") = '\0'; 15 puts(value); 16 17 return 0; 18}
usr ~/Project/test % ./a.out
123&5
投稿2020/05/16 23:54
編集2020/05/17 13:42総合スコア6851
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。