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

时间:2014-10-24 07:40:05

标签: c string

问题是这样的。

更改用户提供的字符串以形成回文。 为此,有两条规则: (a)减少一封信的价值,例如改变' d'到了'但是不能改变' c'到了'。 (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,因为这是约束之一。

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

1 个答案:

答案 0 :(得分:1)

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