Как проверить 10-значный номер в строке

В C как проверить, содержит ли строка, прочитанная из файла, 10-значное число? Я использовал strspn, и это, кажется, работает, но я думаю, что есть лучшие способы. Любая помощь с благодарностью.

char cset[] = "1234567890";
do
{  
// read line into line_string       
} while (strspn(line_string, cset) != 10);

4 ответа

Да, есть много эффективных способов, но это зависит от того, как вы собираетесь использовать их в своей программе. Есть команды в зависимости от вашего контекста использования, вы можете прочитать в "strncmp" и "strstr". Если вы хотите сравнить строку в начале строки, которую вы можете использовать, здесь приведен пример strncmp.

#define VALID_STRING "  <project"
#define COMPARELIMIT 10

if(!strncmp(linebuffer, VALID_STRING, COMPARELIMIT)) {
// your code goes here

}
else {

}

если вы хотите сравнить в любой другой точке буфера строки, используйте "strstr"

#define CHECK_STRING "name="
    char *start=NULL; 
    start=strstr(linebuffer, CHECK_STRING);
    // it returns the address pointing to the first character of that(CHECK_STRING) string any where in linebuffer.

Есть более удобный способ, используйте библиотеку string.h

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, const char *argv[])
{
    char string[] = "0123456789";
    int stringLength = strlen(string);
    printf("%d\n", stringLength);
    return 0;
}

Это зависит от того, что вы хотели.

Давайте предположим кучу разных входов. Для этого имеем:

char cset[] = "1234567890";

char str1[] = "5319764208";            /* all digits in different order */
strspn(str1, cset);    /* returns 10 */
char str2[] = "098765432";             /* not all digits present */
strspn(str2, cset);    /* returns 9 */
char str3[] = "not098a7654num321";     /* not a number, but has all digits */
strspn(str3, cset);    /* returns 0 */
char str4[] = "blah 1234567890 blah";  /* all digits in same order plus chars */
strspn(str4, cset);    /* returns 0 */

Так что это зависит от того, что вы намеревались принять.

Он должен работать. Вы уверены, что прочитали line_string правильно?

char cset[] = "1234567890";
char line[] = "9846578497";
printf("%d", strspn(line, cset));

выходы 10, Простой цикл, который явно проверяет каждый символ, также довольно прост:

int i, digits = 0;
for (i = 0; line[i] != '\0'; ++i)        // <-- make sure line is null-terminated
    if (isdigit(line[i])) digits++;
printf("%d", digits);
Другие вопросы по тегам