我正在尝试实现一个接收ac字符串作为输入的函数,将所有小写字符转换为大写,然后将结果存储在输出参数中。下面是这个函数的代码:
void makeUpper( const unsigned char* input, unsigned char* output )
{
int inputLength = strlen((char*)input);
int outputLength = strlen((char*)output);
for (int i = 0; i < inputLength; i++)
{
if ((input[i] >= 97) && (input[i] <= 122))
{
output[i] = input[i] - 32;
}
else
{
output[i] = input[i];
}
}
}
现在,在 inputLength > outputLength 的情况下显然会出现问题。为了解决这个问题,我在 inputLength & outputLength 声明和 for 循环之间插入了以下代码。
if (inputLength > outputLength)
{
for (int i = 0; i < (inputLength - outputLength); i++)
{
strcat((char*)output, " ");
}
}
这不仅会产生错误(这个函数或变量可能不安全......),而且我几乎可以肯定我正在以错误的方式处理这个问题。但是,我想不出任何替代方案。
编辑:
我使用的主要功能如下:
int main()
{
unsigned char in[] = "HELLO aaaaaaaaaa 678";
unsigned char out[] = " xxxxxxxxx";
makeUpper( in, out );
cout << in << " -> " << out << endl;
makeUpper( out, in );
cout << out << " -> " << in << endl;
return 0;
}
我的功能应该打印的是:
HELLO aaaaaaaaaa 678 -> HELLO AAAAAAAAAA 678xxxxxxxxx
HELLO AAAAAAAAAA 678xxxxxxxxx -> HELLO AAAAAAAAAA 678XXXXXXXXX