私はchar *ソースを持っています。そして、私はそれがシンボル "abc"から始まり、ソースが終わるところで終わることを知っている、それを抽出したいと思います。 strstr私はpoinerを得ることができますが、位置はありません。位置がなければ、部分文字列の長さはわかりません。純粋なCで部分文字列のインデックスを取得するにはどうすればよいですか?部分文字列のインデックスを取得
答えて
ポインタの減算を使用します。
char *str = "sdfadabcGGGGGGGGG";
char *result = strstr(str, "abc");
int position = result - str;
int substringLength = strlen(str) - position;
あなたがストリングの最初の文字へのポインタを持っている場合、およびサブストリングが、その後、元の文字列の終わりで終了:
strlen(substring)
はあなたにその長さを与えます。substring - source
は、あなたに開始インデックスを与えます。
ありがとうございます!私は何らかの理由で投票できないので、ありがとうございます。 – Country
char *source = "XXXXabcYYYY";
char *dest = strstr(source, "abc");
int pos;
pos = dest - source;
oops 'source =" abracadabcabcabcabc "' :) – pmg
@pmg - 重要ではありません - "abc 'で始まります" strstr ()は一度成功したら見えなくなります – KevinDTimm
例をもっと完成させるためにmallocで配列を割り当てています。もちろん、私もエラーチェックを行っています;-) –
正式に他の人が正しいです - substring - source
は確かに開始インデックスです。しかし、あなたはそれを必要としません:source
へのインデックスとしてそれを使用します。したがって、コンパイラは新しいアドレスとしてsource + (substring - source)
を計算しますが、ほぼすべての使用例ではsubstring
で十分です。
最適化と簡素化のヒント。
ありがとうございます!私はなんらかの理由で投票できません。 – Country
開始と終了の単語ここ
string search_string = "check_this_test"; // The string you want to get the substring
string from_string = "check"; // The word/string you want to start
string to_string = "test"; // The word/string you want to stop
string result = search_string; // Sets the result to the search_string (if from and to word not in search_string)
int from_match = search_string.IndexOf(from_string) + from_string.Length; // Get position of start word
int to_match = search_string.IndexOf(to_string); // Get position of stop word
if (from_match > -1 && to_match > -1) // Check if start and stop word in search_string
{
result = search_string.Substring(from_match, to_match - from_match); // Cuts the word between out of the serach_string
}
C言語ではなくCに関する質問 –
C++では、より簡単な方法があります:string :: Findメソッドと文字列コンストラクタstring(const string&str 、size_t pos、size_t n = npos); – Alecs
によって文字列から単語を切り出す機能が...オフセット機能とstrpos関数のCバージョンです
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int strpos(char *haystack, char *needle, int offset);
int main()
{
char *p = "Hello there all y'al, hope that you are all well";
int pos = strpos(p, "all", 0);
printf("First all at : %d\n", pos);
pos = strpos(p, "all", 10);
printf("Second all at : %d\n", pos);
}
int strpos(char *hay, char *needle, int offset)
{
char haystack[strlen(hay)];
strncpy(haystack, hay+offset, strlen(hay)-offset);
char *p = strstr(haystack, needle);
if (p)
return p - haystack+offset;
return -1;
}
- 1. ソラリスの部分文字列のインデックスを取得する
- 2. Camelのxpath内の文字のインデックスによる部分文字列の取得
- 3. Pythonリストの文字列間の部分文字列を取得
- 4. Java:部分文字列インデックスの位置
- 5. PHPの部分文字列のインデックス0を取得する方法
- 6. メッセージの部分文字列の部分文字列の部分文字列
- 7. C++はインデックス付きの文字列の部分文字列を効率的に取得します
- 8. JavaScript内の文字列のすべての部分文字列を取得
- 9. 特定の部分文字列の後の文字列を取得
- 10. JavaScriptの文字列の部分文字列を取得できません
- 11. 文字列の特定の部分文字列を取得する
- 12. JavaScriptの文字列から部分文字列をパターンで取得する
- 13. Liquidの文字列から部分文字列を取得しますか?
- 14. PowerShell Regexは2文字列の部分文字列を取得します
- 15. mysqlの文字列から部分文字列を取得する方法
- 16. 文字列内にある部分文字列の位置を取得する
- 17. 2つの部分文字列の間で部分文字列を取得する方法は?
- 18. Python regexは、前の部分文字列の一致後に部分文字列を取得します。
- 19. jQueryの部分文字列の先頭と末尾部分文字列を持つ文字列から部分を取得
- 20. 文字列から繰り返し部分文字列を取得する
- 21. 文字列から部分文字列を複数回取得する
- 22. 大きな文字列から部分文字列を取得するR
- 23. インデックスの分割文字列
- 24. Java regex - 文字列の特定の部分を取得する
- 25. preg_match_all - パターンと文字列の間の部分を取得
- 26. 文字列の特定の部分を取得する
- 27. javaのarraylistで部分文字列を取得する方法
- 28. htaccessファイルの部分文字列を取得する
- 29. Bash - カラーコードの部分文字列を取得する
- 30. bash内の部分文字列を取得する方法
あなたはおそらく、長さについて心配することなく、ポインタだけで必要なものを行うことができます。 – pmg
@Country - あなたが投票できない理由はありません(周波数に限界があるかもしれません) – KevinDTimm