2015-03-14 2 views
1

Скажем, у меня есть файл:Проверьте, находится ли подстрока в строке более одного раза?

f56,5 d23,4 

И я Получение значения после «F» и запятой (и то же самое с г), поэтому я делаю это: (While чтение в файл с помощью fgets)

while (fgets(buf,100,file) != NULL) 
{ 
    temp = strstr(buf,"f"); //where temp is a (char *) 
    if(temp != NULL) 
    { 
     //An int defined previously 
     x = atol(temp+1); //get the value 56 
     temp = strstr(buf,","); //get the value 5 
     y = atol(temp+1); //get the value 5 
    } 

    temp = strstr(buf,"d"); 
    if(temp != NULL) 
    { 
     a = atol(temp+1); //get the value 24 
     temp = strstr(buf,","); //get the value 4? 
     b = atol(temp+1); //get the value 4? 
    } 


} 

Такого рода работ, однако, величина а и Ь не правильно, иногда верно, однако б всегда значение у (предыдущее значение запятой) , Я не совсем уверен, как продолжить здесь, я пробовал использовать другой указатель для использования strstr в коде, но это, похоже, не работает, любая помощь будет принята с благодарностью.

ответ

2

однако b всегда значение y (предыдущее значение запятой)

Это потому, что вы начинаете искать запятую с начала снова, так что вместо того, чтобы запятая, связанной с 'd' вы снова получите один связанный с 'f'.

Чтобы устранить эту проблему, замените эту строку

temp = strstr(buf, ","); //get the value 4? 

с этим:

temp = strstr(temp+1, ","); //yes, get the value 4! 

Это начнет поиск следующей запятой после 'd', давая вам правильный результат.

+0

Вы имели в виду, что получили бы значение 4 здесь? не 5? – user3739406

+0

@ user3739406 Да, вы получите '4'. – dasblinkenlight

Смежные вопросы