0

ランダムな10桁の数字を含む文字列を持つことができ "abcgfg1234567890gfggf"ます "fgfghgh3215556890ddf"

基本的に、10 桁の数字と char の任意の組み合わせが文字列に含まれるため、文字列をチェックして 10 桁の数字が存在するかどうかを判断する必要があります。strspn を使用していますが、0 を返します

char str_in[] = "abcgfg1234567890gfggf";
char cset[] = "1234567890";    
int result;

result = strspn(str_in, cset);   // returns 0   need it to return 10

次のコードが 10 ではなく 0 を返すという事実は、問題を強調しています。私は以前にこれを尋ねましたが、ほとんどの返信は既知の 10 桁の番号と照合するためのものでした。私の場合、番号はランダムになります。より良い方法はありstrspnますか?

4

6 に答える 6

3

文字列の先頭に数字がないため、0 が返されます。

strspn() 関数は、s の最初のセグメントの長さ (バイト単位) を計算します。これは、受け入れられたバイトだけで構成されます。

数字以外をスキップする必要がありますstrcspn--そしてstrspn、文字列+そのオフセットを呼び出します。あなたは試すことができます:

/* Count chars to skip. */
skip = strcspn(str_in, cset);

/* Measure all-digit portion. */
length = strspn(str_in + skip, cset)

編集

これはループで行う必要があります。たとえば、文字列が "abcd123abcd1234567890"最初の場合、strspn一致するのは 3 文字のみであり、さらに調べる必要があります。

于 2013-10-04T13:47:44.900 に答える