2012-10-09 70 views
-3

我已经合并3变量成为一个变量的问题合并3变量:我怎么能在一个变量

例如:

int var1,var2,var3; 
int result; 
var1 = 1; 
var2 = 2; 
var3 = 3; 

result = ........??; 

printf("Result %d",result); 

output : 
123 

我怎样才能做到这一点?

+1

你想要一个C解决方案还是一个C++解决方案?他们不是同一种语言。 – meagar

+0

你为什么要这样做?家庭作业?如果是这样,以这种方式标记。 (罢工......不这样做!) – tmpearce

+2

@tmpearce:[家庭作业]标签已被禁止。 –

回答

5

Yay,C++ 11 variadic模板真棒!这里有一个N -finitely可扩展版本,假设sum(args) < INT_MAX

template<int max, int ...arguments> 
int merge_integers() 
{ 
    int args[] = { arguments... }; 
    int size = sizeof(args)/sizeof(int); 
    int mul = 1; 
    int result = 0; 

    for (int i = size; i--;) 
    { 
     result += args[i] * mul; 
     mul *= max; 
    } 

    return result; 
} 

用法示例:

printf("%d\n", merge_integers<10, 5, 4, 3, 2, 1>()); 
printf("%x\n", merge_integers<16, 0xA, 0xB, 0x1, 0x3, 0x5>()); 
printf("%o\n", merge_integers<8, 1, 2, 3, 4, 7>()); 

输出:

 
54321 
ab135 
12347 
5
result = var1 * 100 + var2 *10 + var3; 
+0

现在用C++模板编写一个'N'有限可扩展版本! JK +1 –

+1

如果var1,var2和var3不是1位数字 –

+0

@izomorphius那么...这仍然是三个变量的组合。它的问题没有一个说它必须是可逆的。 –

0

它应该是:

char str[100]; 
sprintf(str, "%d%d%d", var1, var2, var3); 
sscanf(str, "%d", &result); // or atoi 
+0

是的,但这是不可逆的,并且sscanf在溢出时具有未定义的行为... –

5

的printf( “结果%d%d%d”,VAR1,VAR2,VAR3);

0

如果你不知道有多少位做经销商也有,你将不得不经历的stringstream:

#include <iostream> 
#include <sstream> 

using namespace std; 

int main() { 
     int a = 10; 
     int b = 12; 
     int c = 2; 
     stringstream ss; 
     ss << a << b << c; 
     int merge; 
     ss >> merge; 
     cout << merge << endl; 
     return 0; 
} 

工作ideone例子。

+0

感谢您的建议 – Adhy

0

你真的需要诠释的变量?字符串是否符合您的要求?

#include <iostream> 
#include <sstream> 
#include <string> 
using namespace std; 

int 
main() 
{ 
    int var1 = 1; 
    int var2 = 2; 
    int var3 = 3; 

    ostringstream oss; 
    string result; 

    oss<<var1<<var2<<var3; 

    result = oss.str(); 
    cout<<result<<endl; 
    return 0; 
} 
相关问题