gpt4 book ai didi

c - 改进字符串和字符的存储和比较的建议

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

问题是这样的。

更改用户提供的字符串以形成回文。为此,有两条规则:(a) 减少字母的值,例如将“d”更改为“c”,但不能将“c”更改为“d”。(b) 为了形成回文,可以反复减少字母的值,直到字母变成“a”。一旦字母更改为“a”,就无法再更改。

任何字母值的每次减少都算作一次操作。求将给定字符串转换为回文所需的最少操作数。

这是一个黑客问题:“情书之谜”

当我解决这个问题时,我犯了很多错误,我使用char *str[n]gets来输入字符串。我认为它会起作用,但很长时间后我意识到我实际上根本没有分配任何空间。后来我想出了二维数组 char[n][1000] 来存储字符串,并且 scanf 似乎对我有用。

这是我的解决方案:

int main() {


int i, n, len, pos, ops, end;
scanf("%d",&n);
char str[n][10000];
char a,b;
for (i=0;i<n;i++) {
scanf("%s",str[i]);
}
for (i=0;i<n;i++) {
len = strlen(str[i]);
pos = 0;
end = len - 1;
ops = 0;
while ( pos < end) {
a = str[i][pos];
b = str[i][end];
if ( a != b ) {
if ( b > a )
ops = ops + (b -a);
else
ops = ops + (a -b);
}
pos++;
end--;
}
printf("%d\n", ops);
}

return 0;
}

这非常有效。另外,我必须在程序中假设字符串的最大长度为 1000,因为这是约束之一。

如何改进此解决方案而不使其变得过于复杂?我正在寻找存储和比较的建议。

最佳答案

好吧,你可以#include <string.h>并使用strcmp/strncmp比较字符串。
硬编码长度是有风险的:您需要使用 fgets 控制输入的长度(#include <stdio.h>)。

关于c - 改进字符串和字符的存储和比较的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26543480/

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