c++ - 如何删除n个数字中的c个数字?
问题描述
我编写了一个P
删除整数中c
数字的函数。n
函数的头部是 : void P(int &n, int &c)
。
假设 n = 23734 和 c = 3
输出应该是:274
这是我在这里问之前尝试过的。
无效 P(int &n,int &c) {
int p=1,k=0;
while(n)
{
if(n%10==c)
n=n/10;
else
{
k=k+n%10*10;
n=n/10;
}
}
cout<<k;
}
PS我是新来的,所以我不知道如何正确添加代码。
解决方案
使用 std::to_string() 将您的 n 转换为字符串:
std::string s = std::to_string(n);
然后通过添加 48 将 c 转换为 char,这相当于 '0' + 你的数字 c = '0' 和 '9' 之间的一些字符。
char myChar = '0' + c;
现在通过遍历字符串并删除 myChar == s[i] 的索引来擦除 myChar 的每一个出现
for(int i = 0; i < s.size(); i ++){
If(myChar == s[i]){
s.erase(s.begin()+i);
i--;
}
}
最后,将字符串转换回 int:
n = std::stoi (s);
编辑:您也可以通过除法和模运算来完成此操作,如评论之一所述。
这是我刚刚放在一起的一个例子:
bool sign = false; // false -> + , true -> -
if (n < 0) { n = -n; sign = true; }
int back = 0;
int front = n;
int i = 0;
while (front > 0) {
if(front % 10 != c){
back += (front % 10) * std::pow(10, i++);
}
front /= 10;
}
n = sign ? -back : back;
推荐阅读
- python - GET API 中的 flask_restful 类似数组的参数
- expo - 如何使用 Expo 的 Manage Work 流程生成 Apk 文件
- spring-boot - 为什么我的 spring-boot 应用程序在 Intellij 中给出“ClassNotFoundException:javax.servlet.Filter”但在 STS 3 中没有?
- visual-studio-code - 如何更改 VS Code 用于 linting 的 .pylintrc 文件?
- ssh - 如何手动执行 sudo chown 命令
- c++ - 在开关盒内阻塞
- jakarta-ee - Openliberty 启用线调试跟踪
- react-native - 当通过网络调用改变状态时,在 textinput 上响应 Native 调用 onChange
- c# - 调用 Dispatch/LUIS 模型时,操作返回无效状态代码“未授权”
- multithreading - C++ 向量
push_back(): 无法找到创建未命名线程变量的方法