我想用3乘3分隔给定数字的数字。
输入:1234567
输出:1,234,567
并且我编写了以下代码:
override func viewDidLoad() {
let tap = UITapGestureRecognizer(target: self, action: #selector(moreInfo))
tap.numberOfTapsRequired = 2
view.addGestureRecognizer(tap)
}
// the main switch case
switch choice {
case 1:
print("1 is chosen")
moreInfo(option:1)
case 2:
print("2 is chosen")
moreInfo(option:2)
}
//to be activated when double tap
@objc func moreInfo(option: Int) {
switch choice {
case 1:
print("more information for 1")
case 2:
print("more information for 2")
}
}
如下面的照片所示,该代码对于带有...
16、17、18、19、20、21、22、23、24位数字
32、33、34、35、36位数字
但是它会触发某个数字断点。这些特定数字是13、14、15、25、26、27、28、29、30、31
答案 0 :(得分:2)
它对您不起作用的原因是您帖子的评论。对于答案,以下代码应为您完成工作:
string str;
string::iterator it;
cout << "Enter a number with any number of digits: ";
cin >> str;
if (str.size() > 3) {
it = str.end() - 3; // Take the first place where there should be a comma
while (it > StringIn.begin()) { // Make sure that you are still in a string's place
if (it - str.begin() > 3)
it = str.insert(it, ',') - 3; // Insert a comma in the right place, and move to the next comma place
else it = str.begin();
}
}
cout << str << endl;
答案 1 :(得分:1)
我这样解决了这个问题:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string StringIn;
cout << "Enter a number with any number of digits: ";
cin >> StringIn;
unsigned int len = StringIn.length();
if (len % 3 == 0)
for (int i = 1; i < len / 3; i++)
StringIn.insert(StringIn.end() - (4 * i - 1), ',');
else
for (int i = 1; i <= len / 3; i++)
StringIn.insert(StringIn.end() - (4 * i - 1), ',');
cout << StringIn << endl;
system("pause");
return 0;
}
在previous version of the code中,指向it1
和StringIn
的字符串指向末尾的it2
未更新。所以我写了这行
it1 = StringIn.end();
通过
StringIn.insert(StringIn.end() - (4 * i - 1), ',');
但是由于修改了字符串,因此每次迭代的表达式都应该有微小的变化。
考虑:
1234567890123456789012
i=1
时,','
字符应插入end-3
1234567890123456789,012
i=2
时,','
字符应插入end-7
中而不是end-6
中,因为在先前的迭代中插入了','
1234567890123456,789,012
当i=3
时,','
字符应插入end-11
中而不是end-9
中,因为在先前的迭代中插入了两个','
。
因此,在第i
次迭代中,从先前的迭代中插入了(i-1)
个数字','
。为了在正确的位置插入','
,我们应该从末尾退后3 * i + (i - 1)
步。
这就是为什么我将第19和22行写成这种形式