我正在用C语言编写一个函数(不是C ++,它将在较旧的计算机上运行),该函数应使用输入字符*并根据字母大写和数字向其添加空格,然后返回结果。由于平台限制,我恐怕无法使用字符串及其函数。
例如,输入“ TestingThisPieceOfText”应作为“测试此文本”返回。
我有一些(现在还算是粗略的)代码适用于这样的简单情况,但是我想在规则中添加一些例外,这就是我需要帮助的地方:
这里是当前功能(就像我说的,现在有点粗糙):
char* add_spaces_to_string(const char* input)
{
char input_string[100];
strcpy(input_string, input);
char* output = (char*)malloc(sizeof input_string * 2);
const char capitals[] = "ABCDEFGHIJKLMOPQRSTVWXYZ";
const char numbers[] = "1234567890";
const char mc[] = "Mc";
// Special case for the first character, we don't touch it
output[0] = input_string[0];
unsigned int output_index = 1;
unsigned int capital_found = 0;
unsigned int number_found = 0;
for (unsigned int input_index = 1; input_string[input_index] != '\0'; input_index++)
{
for (int capitals_index = 0; capitals[capitals_index] != '\0'; capitals_index++)
{
if (capitals[capitals_index] == input_string[input_index]
&& capital_found < input_index - 1
&& number_found < input_index - 1)
{
capital_found = input_index;
//printf("Found a capital character (%c), in position %u. Adding a space.\n", input_string[i], i);
output[output_index] = ' ';
output_index++;
output[output_index] = input_string[input_index];
}
}
for (int numbers_index = 0; numbers[numbers_index] != '\0'; numbers_index++)
{
if (numbers[numbers_index] == input_string[input_index]
&& capital_found < input_index - 1
&& number_found < input_index - 1)
{
number_found = input_index;
output[output_index] = ' ';
output_index++;
output[output_index] = input_string[input_index];
}
}
output[output_index] = input_string[input_index];
output_index++;
}
output[output_index] = '\0';
return output;
}
使用上面的简单示例
"AnotherPieceOfTextWithoutSpaces"
已正确转换为
"Another Piece Of Text Without Spaces"
但更复杂的,例如
"A10TankKiller2Disk"
不是-它返回
"A1 0Tank Killer 2Disk"
在这种情况下。
所以问题是,为什么我要在我不想要的位置上获得空间,而又没有在我想要的位置上获得空间(基于上述规则)?
任何指向正确方向的指针将不胜感激! :)
答案 0 :(得分:0)
编辑:大写字母和数字的检测比必要的更为复杂。同样,它会进入在不正确位置添加空格的例程,当一个数字跟随另一个数字时,以及大写字母跟随一个数字时。
我使用2个受支持的辅助函数-isdigit()和isupper()重新编写了该函数。这似乎使其暂时可用:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int)
对于“ Mc”的情况,我仍然需要添加一条特殊规则,但这对我来说是一个小问题,稍后我将添加它。