gpt4 book ai didi

C - 在大写字母和数字的输入字符串中添加空格,但有一些异常(exception)

转载 作者:行者123 更新时间:2023-11-30 19:30:00 25 4
gpt4 key购买 nike

我正在用 C(不是 C++,这将在旧计算机上运行)编写一个函数,该函数应该接受输入 char* 并根据字母大写和数字向其添加空格,然后返回结果。由于平台限制,我恐怕无法使用字符串及其函数。

例如,输入“TestingThisPieceOfText”应返回为“Testing This Piece Of Text”。

我有一些(目前相当粗糙)代码适用于像这样的简单情况,但我想在规则中添加一些异常(exception),这就是我需要帮助的地方:

  • 如果多个大写字母在一个序列中,则它们不应以空格分隔。例如,“APB”应保持原样。
  • 如果输入字符串中有数字,则前后应有空格,但数字之间不能有空格。例如,“A10TankKiller2Disk”应返回为“A10 Tank Killer 2 Disk”。
  • “Mc”的特殊情况,以涵盖可能发送此类名称的情况。例如,“ScroogeMcDuckIsFilthyRich”应返回为“Scroodge McDuck Is Filthy Rich”。

这是当前的功能(就像我说的,现在有点粗糙):

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" 

在这种情况下。

所以问题是,为什么我在我不想要的位置上得到了空格,却没有把它们放在我想要的位置上(基于我上面提到的规则)?

任何指向正确方向的指示将不胜感激! :)

最佳答案

编辑:大写字母和数字的检测比必要的更复杂。此外,当一个数字跟在另一个数字后面以及当一个大写字母跟在一个数字后面时,它还会在错误的位置添加空格。

我使用 2 个受支持的辅助函数重写了该函数 - isdigit() 和 isupper()。这似乎使它暂时有效:

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 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 input_index = 1;
unsigned int capital_found = 0;
unsigned int number_found = 0;
while (input_string[input_index])
{
if (isdigit(input_string[input_index]))
{
if (number_found < input_index - 1)
{
output[output_index] = ' ';
output_index++;
output[output_index] = input_string[input_index];
}
number_found = input_index;
}

else if (isupper(input_string[input_index]))
{
if (capital_found < input_index - 1)
{
output[output_index] = ' ';
output_index++;
output[output_index] = input_string[input_index];
}
capital_found = input_index;
}

output[output_index] = input_string[input_index];
output_index++;
input_index++;
}
output[output_index] = '\0';

return output;
}

我仍然需要为“Mc”的情况添加一个特殊规则,但这对我来说是一个小问题,我稍后会添加它。

关于C - 在大写字母和数字的输入字符串中添加空格,但有一些异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51873161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com