3つの変数を1つの変数にマージするのに問題があります:
例 :
int var1,var2,var3;
int result;
var1 = 1;
var2 = 2;
var3 = 3;
result = ........??;
printf("Result %d",result);
output :
123
これどうやってするの?
result = var1 * 100 + var2 *10 + var3;
ええ、C++11 の可変個引数テンプレートは素晴らしいです! これは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
printf("Result %d%d%d",var1, var2, var3);
Should it be:
char str[100];
sprintf(str, "%d%d%d", var1, var2, var3);
sscanf(str, "%d", &result); // or atoi
本当に int 変数が必要ですか? ストリングは要件を満たしていますか?
#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;
}
変数の桁数がわからない場合は、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での作業例。