Для выяснения вопроса, так как неясно, вы хотите иметь следующий вход:
"[email protected]@[email protected]@[email protected]"
быть изменен, чтобы быть следующим:
"[email protected]@[email protected]@[email protected]"
Ваша проблема заключается в том, что вам нужно проанализируйте каждое число в значение float, чтобы выполнить какое-либо сравнение. Либо это, либо вам нужно будет вручную разобрать его, проверив «.». персонаж. Выполнение этого вручную жестко, подвержено ошибкам и ненужно, потому что стандартная библиотека C предоставляет функции, которые могут вам помочь.
Поскольку это домашнее задание, я дам вам несколько советов о том, как подойти к этой проблеме вместо фактического решения. Что вы должны сделать, это попытаться написать решение с этими шагами, и если вы застряли, отредактируйте исходный вопрос с помощью кода, который вы написали, где он терпит неудачу и почему вы считаете, что он терпит неудачу.
Ваш первый шаг к tokenise вход в следующее:
"2"
"0.88315"
"1"
"1.5005"
"true"
"0.112"
Это может быть сделано путем перебора строки и либо разделив его или с помощью указателя, после которого «@» происходит характер. Разделение строки можно сделать с помощью strtok
. Однако strtok
разделит строку, изменив ее, что не обязательно необходимо в нашем случае. Более простой метод - просто перебирать строку и останавливаться каждый раз после достижения символа «@». Вход будет затем tokenised к следующему:
"[email protected]@[email protected]@[email protected]"
"[email protected]@[email protected]@0.112"
"[email protected]@[email protected]"
"[email protected]@0.112"
"[email protected]"
"0.112"
Некоторые из этих подстрок не начинаются со строки, которая представляет собой поплавок. Вам нужно будет определить, кто из них. Для этого вы можете попытаться проанализировать фронт каждой строки как float. Это можно сделать с помощью sscanf
. После разбора поплавков вы сможете выполнить сравнение, которое хотите.
Вы пытаетесь изменить строку на другую длину, поэтому при замене значения float на «1» вам нужно проверить длину исходного значения. Если он длиннее 1 символа, вам придется переместить последующие символы вперед.Например:
"[email protected]"
Если вы разобрали первый маркер и нашел, что это будет > 2
, вы бы заменить первый символ с «1». Этот результат:
"[email protected]"
Вы тогда еще нужно удалить остальную часть этого маркера, сдвигая остальные строки вниз, чтобы получить:
"[email protected]"
Существует путаница в определении понятия «номер». Можете ли вы показать, какой результат ДОЛЖЕН быть? Должно ли 2.5005 быть изменено на 1.1001 или 1.0000 или 1? – hatchet