在我的代码中,我正在处理包含NSNumber值的NSString。此NSNumber值可能可能是重复的十进制数(e.x. 2.333333333e + 06),以字符串格式缩短为“2.333333”。它也可能是一个终止号码(e.x.2.5),负数或无理数(2.398571892858 ......)(这里只处理小数)
我需要有办法弄清楚字符串中是否有重复的数字(如果需要,还有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 1/3)。我已经使用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
}
答案 0 :(得分:1)
使用C.取小数部分。转换为具有已知精度的字符串。如果字符串的长度表示缺少最后的数字,则不重复。使用NSString-UTF8String转换字符串。摆脱最后一位数(可能是舍入或实际浮点算术错误)。使用函数int strncmp(const char * str1,const char * str2,size_t num)在字符串本身内执行比较。如果结果是8个字符长,最后2个字符与前2个字符匹配,那么前6个字符是否应被视为重复?
假设您需要分数知识:
•可能性1:使用分数。输入分数。用分数计算。输出分数。如果需要,扩展c ++分数类的许多示例之一并使用它。
•可能性2:选择远小于两倍的精度。从结果中得到一小部分。根据准确度减少允许舍入的分数。
答案 1 :(得分:0)
我建议使用不是最优但易于编写的解决方案
创建NSMutableDictionary
,其中包含作为键的数字和作为值的出现次数。
如果字符串中的数字由已知符号
分隔,则可以使用componentsSeparatedByString:循环检查字典中的valueForKey
,如果需要增加值
最后一步是分析我们的字典,并用数字做任何你需要的事情