c ++程序替换给定数字中的数字

时间:2016-09-28 05:31:48

标签: linux

您如何使用基本的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;

6 个答案:

答案 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)

如果我理解正确,您只是想简单地添加111,您希望将数字视为字符串,然后更改数组中的元素。这是对的吗?

这可能会让你走上正轨:

Convert an int to ASCII character

答案 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--;
    }
}

我想这是一般的想法。我没有尝试编译它。当然,这个版本并没有真正优化,我们可以找到一些更有效的方法。哦,它并不适用于负数,但这应该很容易适应。