我想制作一个将int分隔为char数组的C ++方法。 然后给出一部分int。
示例:
输入:
int input = 11012013;
cout << "day = " << SeperateInt(input,0,2); << endl;
cout << "month = " << SeperateInt(input,2,2); << endl;
cout << "year = " << SeperateInt(input,4,4); << endl;
输出:
day = 11
month = 01
year = 2013
我认为这就像this。但这对我不起作用,所以我写道:
int separateInt(int input, int from, int length)
{
//Make an array and loop so the int is in the array
char aray[input.size()+ 1];
for(int i = 0; i < input.size(); i ++)
aray[i] = input[i];
//Loop to get the right output
int output;
for(int j = 0; j < aray.size(); j++)
{
if(j >= from && j <= from+length)
output += aray[j];
}
return output;
}
但是,
1 )你不能这样调用int的大小。
2 )你不能只喜欢一个字符串说我想要int的元素i,因为那时这个方法没用了
如何解决这个问题?
答案 0 :(得分:4)
int input = 11012013;
int year = input % 1000;
input /= 10000;
int month = input % 100;
input /= 100;
int day = input;
实际上,您可以使用整数除法和模运算符轻松创建所需的函数:
int Separate(int input, char from, char count)
{
int d = 1;
for (int i = 0; i < from; i++, d*=10);
int m = 1;
for (int i = 0; i < count; i++, m *= 10);
return ((input / d) % m);
}
int main(int argc, char * argv[])
{
printf("%d\n", Separate(26061985, 0, 4));
printf("%d\n", Separate(26061985, 4, 2));
printf("%d\n", Separate(26061985, 6, 2));
getchar();
}
结果:
1985
6
26
答案 1 :(得分:1)
我能想到的最简单的方法是将int格式化为字符串,然后仅解析它所需的部分。例如,要获得这一天:
int input = 11012013;
ostringstream oss;
oss << input;
string s = oss.str();
s.erase(2);
istringstream iss(s);
int day;
iss >> day;
cout << "day = " << day << endl;
答案 2 :(得分:1)
首先将整数值转换为char字符串。使用itoa()
http://www.cplusplus.com/reference/cstdlib/itoa/
然后只是遍历你的新char数组
int input = 11012013;
char sInput[10];
itoa(input, sInput, 10);
cout << "day = " << SeperateInt(sInput,0,2)<< endl;
cout << "month = " << SeperateInt(sInput,2,2)<< endl;
cout << "year = " << SeperateInt(sInput,4,4)<< endl;
然后更改您的SeprateInt
以处理char输入
使用atoi()
http://www.cplusplus.com/reference/cstdlib/atoi/
如果需要,转换回整数格式。