В моем коде я имею дело с NSString, который содержит значение NSNumber. Это значение NSNumber может быть возможно быть повторяющимся десятичным числом (e.x. 2.333333333e + 06), которое сокращается до «2.333333» в строковом формате. Это может быть также конечное число (ex 2.5), отрицательное или иррациональное число (2.398571892858 ...) (только с десятичными знаками здесь)Подсчитайте количество произвольных повторяющихся десятичных чисел в NSString
Мне нужно найти способ выяснить, есть ли повторяющиеся числа в строка (или NSNumber, если необходимо). В моем коде у меня не было бы способа узнать, что такое повторяющийся номер, так как это результат вычислений, запущенных пользователем. Я пробовал этот цикл for
(см. Ниже), который не работает так, как я этого хочу, из-за моей неопытности с индексированием строк/диапазонами/длинами.
BOOL repeat = NO; //bool to check if repeating #
double repNum, tempNum; //run in for loop
NSString *repeating = [numVal stringValue]; //string that holds possible repeating #
for (int i = 3; i <= [repeating length]-3; i++) { //not sure about index/length here
if (i == 3) {
repNum = [repeating characterAtIndex:i];
}
tempNum = [repeating characterAtIndex:i];
if (tempNum == repNum) {
repeat = YES;
} else {
repeat = NO;
}
}
Этот код не работает, как я хотел бы, чтобы, в основном потому, что я также должен учитывать отрицательные черточки в строке и разным количеством цифр (13 1/3 против 1/3 1). Я использовал функцию modf
, чтобы отделить целые числа от десятичных знаков, но для меня это тоже не сработало.
Заранее спасибо. Пожалуйста, дайте мне знать, если я смогу прояснить ситуацию.
РЕДАКТИРОВАТЬ:
Этот код работает с выводом различных решений для многочленов (квадратичной формулы). Надеюсь, что это поможет превратить его в контекст. Глянь сюда. (Пример входных данных)
NSNumber *firstPlusSolution, *secondMinusSolution;
NSString *pValueStr, *mValueStr;
firstPlusSolution = -(b) + sqrt(square(b) - (4)*(a)*(c)); //a, b, c: "user" provided
firstPlusSolution /= 2*(a);
secondMinusSolution = -(b) - sqrt(square(b) - 4*(a)*(c));
secondMinusSolution /= 2*(a);
pValueStr = [firstPlusSolution stringValue];
mValueStr = [secondMinusSolution stringValue];
if ([NSString doesString:pValueStr containCharacter:'.']) { //category method I implemented
double fractionPart, integerPart;
fractionPart = modf(firstPlusSolution, &integerPart);
NSString *repeating = [NSString stringWithFormat:@"%g", fractionPart];
int repNum, tempNum;
BOOL repeat = NO;
//do for loop and check for negatives, integers, etc.
}
if ([NSString doesString:mValueStr containCharacter'.']) {
//do above code
//do for loop and check again
}
Как "2.333333333e + 06" сократить до "2.333333"?Процесс неясен. – insys
Кроме того, вы хотите проверить повторение чисел * в любом месте * в строке (это то, что предлагает ваш вопрос)? Например, 22222.3 и 2.33333? – insys
@ user2311023 На 1-м комментировании это то, что он делает. Передача из NSNumber в NSString сокращает его (по крайней мере для меня) до 2.33333. Я предположил, что это всего лишь часть литья значения другому объекту. 2-й комментарий: Нет, извините, просто десятичная. Будет редактировать, чтобы сделать более понятным. –