特定のフォーマットが一致した場合のように:私は、文字列形式を一致かどうかを検証するためにチェックすることができますどのようにチェックした文字列は、私は、文字列が定義されている
char *str
:
x-y-z
のx、y、zのすべてintのタイプです。例については
:"1-2*3"
、"1-2"
、"1-2-3-4"
が無効である一方で、文字列1-2-4
は有効にする必要があります。
特定のフォーマットが一致した場合のように:私は、文字列形式を一致かどうかを検証するためにチェックすることができますどのようにチェックした文字列は、私は、文字列が定義されている
char *str
:
x-y-z
のx、y、zのすべてintのタイプです。例については
:"1-2*3"
、"1-2"
、"1-2-3-4"
が無効である一方で、文字列1-2-4
は有効にする必要があります。
マッチング以外の情報が必要な場合は、ループを使用して文字列を歩くことができます。私はあなたにいくつかの初心者コードを教えます。
int i = 0;
int correct = 1;
int numberOfDashes = 0;
while(correct && i < strlen(str)) {
if(isdigit(str[i])) {
}
else {
if(str[i] == '-') {
numberOfDashes++;
}
}
i++;
}
簡単な方法は、scanf()
を使用して戻り値を確認することです。何かのように
ret = scanf("%d-%d-%d", &x, &y, &z);
if (ret == 3) {// match};
は簡単なアプローチのためにうまくいくでしょう。
このアプローチは、複数のデータ型とそれ以上の入力に対しては機能しませんが、固定形式の場合にのみ機能します。より複雑なシナリオでは、正規表現ライブラリの使用を検討することができます。
Souravの回答に沿っています。
int check(char t[])
{
int a, b, c, d;
return sscanf(t, "%d-%d-%d-%d", &a, &b, &c, &d) == 3;
}
int main()
{
char s[] = "1-2-4";
char t[] = "1-2-3-4";
printf("s = %s, correct format ? %s\n", s, check(s) ? "true" : "false"); // <-- true
printf("t = %s, correct format ? %s\n", s, check(t) ? "true" : "false"); // <-- false
}
テスト "1-2-4-" '' – BLUEPIXY
特定の文字列の例にはsscanf
を使用できます。
int main()
{
int x,y,z;
char *str="1-2-4";
int a = sscanf(str, "%d-%d-%d", &x, &y, &z);
printf("%s", (a == 3) ? "Correct format":"Incorrect format");
return 0;
}
sscanf
フォーマットは、これらの指定された文字列では動作しませんしながら、これを回避するために
int main()
{
int x,y,z;
char *str="1-2*3"; //or "1-2" or ""1-2-3-4""
int a = sscanf(str, "%d-%d-%d", &x, &y, &z);
printf("%s", (a == 3) ? "Correct format":"Incorrect format");
return 0;
}
、あなたが使用する必要がありますregular expressions tとして彼はすでに他の人たちが言っている。
あなたは何を試しましたか?どのようにして、またはしなかったのですか?あなたのプログラムにはどんな問題がありますか?また、[良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)を読んで[最小限の、完全で検証可能な例]を作成する方法を学んでください(http:// stackoverflow .com/help/mcve)。 –
プレーンCのみを使用するか、正規表現ライブラリなどのオプションですか? – usr2564301
あなたの文字列にマッチする正規表現を使うべきだと思います。それについてのいくつかのGoogleの検索を行い、多くの例を見つけるでしょうJohan – baliman