2012-10-09 107 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; 
} 
相關問題