您如何使用基本的c ++替换给定数字中的数字?例如,如果数字是23444并且您想要使用旧数字4并且替换为新数字5以获得新数字23555。 我在下面完成了一些工作但是当我输入输入时,它最终会给我一个不正确的结果。
cout << "Enter the number: " << endl;
cin >> number;
cout << "Enter the old digit: " << endl;
cin >> oldDigit;
cout << "Enter the newDigit: " << endl;
cin >> newDigit;
newDigit=oldDigit;
cout << Newnum << endl;
答案 0 :(得分:2)
您可以使用itoa()将int转换为char *并将其迭代到 检查它是否包含数字。如果是,请获取4的位置并替换 它与5。
我知道你没有使用字符串,但它对你的情况很有帮助。 简单的代码:
#include <string.h>
#include <iostream>
#include <stdlib.h>
int main(){
int numer;
std::cin>>numer;
char* str;
itoa(numer, str, 10);
for(int i = 0; i < strlen(str); i++){
if(str[i] == '4') str[i]='5';
}
}
答案 1 :(得分:1)
答案 2 :(得分:1)
如果你真的只想用int
来做这个,这是一个有效的例子(基于你的一些代码)
#include <iostream>
using namespace std;
int replaceDig( int num, int oldDigit, int newDigit)
{
if(num==0)return 0;
int digit = num%10;
if(digit==oldDigit)digit = newDigit;
return replaceDig(num/10,oldDigit,newDigit)*10+digit;
}
int main()
{
int num, newnum, oldDigit, newDigit;
cout << "Enter the number: " << endl;
cin >> num;
cout << "Enter the old digit: " << endl;
cin >> oldDigit;
cout << "Enter the newDigit: " << endl;
cin >> newDigit;
newnum = replaceDig(num, oldDigit, newDigit);
cout << newnum << endl;
return newnum; //do you really want to return this?
}
答案 3 :(得分:0)
我想出了一个解决方案。不知道它是否包含bug。请告诉我。
int num = 23444 ,new_num = 0;
int mod;
int exponent = 0;
/**
* Now form the new number
*/
while ( num > 0 ) {
mod = num % 10;
num /= 10;
if ( mod == 4 ) // check whether this is the old digit or not
new_num += 5 * pow( 10 , exp); // replace with new digit
else
new_num += mod * pow(10 , exp); // otherwise no change
exp++;
}
num = new_num;
std::cout << num;
答案 4 :(得分:0)
我希望这适合你 -
std::string s = std::to_string(23444);
std::replace( s.begin(), s.end(), '4', '5');
int num = std::stoi(s);
答案 5 :(得分:0)
int replaceDig( int num, int oldDigit, int newDigit) // replacing the old digits in a number with a new digit
{
int position = numDigits(num);
int remainder = num;
int currentDigit;
while (remainder >0)
{
currentDigit=(num/pow(10,position))%10;
if(currentDigit==oldDigit)
{
num = num - oldDigit*pow(10,position);
num = num + newDigit*pow(10,position);
}
remainder = remainder/10;
position--;
}
}
我想这是一般的想法。我没有尝试编译它。当然,这个版本并没有真正优化,我们可以找到一些更有效的方法。哦,它并不适用于负数,但这应该很容易适应。