我在C:
中有这个功能 Map<String,String> datanum = new HashMap<String, String>();
Tihs函数接收两个指向x和y以及一个字符数组的指针。该条目包含一些像这样的坐标:'a7','h13','b9','d11'并且必须将字母转换为整数(x)并且数字相同。 例如,如果输入为'h13',则x将为8和y 13。
所以这是我的函数的完整代码:
void convertXY(int* x, int* y, char entry[3]);
我的void convertXY(int* x, int* y, char entry[3])
{
int i;
char alphabet[26] = "abcdefghijklmnopqrstuvwxyz";
if(entry[2] == NULL) // if the entry is something like 'a1' we must change it to 'a01'
{
entry[2] = entry[1];
entry[1] = '0';
}
for(i = 0; i < 26; i++) // we convert the letter into a number
{
if (alphabet[i] == entry[0])
*y = i;
}
*x = charToInt(entry[1]) * 10 + charToInt(entry[2]); // we convert entry[1] and entry[2] from char to int using powers of 10 (10^0 and 10^1).
}
功能:
charToInt
问题是当我使用这个函数时,我的一些变量会被覆盖。我不知道为什么会这样。例如:
int charToInt(char character)
{
int i;
char numbers[10] = "0123456789";
for(i = 0; i < 10; i++)
if(numbers[i] == character)
return i;
}
答案 0 :(得分:1)
如果您要存储3个charcaters,包括\0
存储空间必须为char entry[4]
。否则,它是未定义的行为。
您不想查看NULL
。你想知道的是它的长度是否为2。
if(strlen(entry)==2) // if the entry is something like 'a1' we must change it to 'a01'
{
entry[2] = entry[1];
entry[1] = '0';
}
如果您了解ascii值, charToInt
就像这样简单。我根据上下文更改了函数名称。
int digitToInt(char digit)
{
if( digit <= '9' && digit >= '0')
return c-'0';
return -1;
}
字母到整数转换也是如此。如果您知道它总是在a
到z
之间,那么您可以这样做: -
void convertXY(int* x, int* y, char entry[3])
{
if(strlen(entry) == 2) // if the entry is something like 'a1' we must change it to 'a01'
{
entry[3]='\0';
entry[2] = entry[1];
entry[1] = '0';
}
*y = (entry[0]-'a')+1;
*x = (entry[1]-'0') * 10 + (entry[2]-'0'); // we convert entry[1] and entry[2] from char to int using powers of 10 (10^0 and 10^1).
}
variable
(命名很糟糕我会说 - 我从未遇到过变量名为variable
的代码)是一个局部变量,你要改变它因为convertXY
,所以你可以传递地址o变量,或者一旦你完成调用函数,就使用x
和y
更改的值来反映变量{{1 }}