【问题标题】:alphabetical sort of letters in a string C字符串 C 中字母的字母排序
【发布时间】:2016-05-19 18:02:58
【问题描述】:

我是 C 编程的新手,我正在尝试编写一个程序来按字母顺序对用户输入的一串字母进行排序。到目前为止,我有以下代码。谁能帮我让它正常运行?代码编译并运行,但似乎没有正确存储运行计数。

就调试而言,我注意到使用字母作为计数器可能是一个问题,但在其他地方也看到过这种情况,他们的code 编译并运行良好。提前致谢。

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
        char str[10], strout[10] ;
        char letter ;
        int letter_count[26] = {0} ;
        int i, j , k, l, strlength ;

        printf("Please enter a string and I'll sort it \n") ;
        fgets(str, sizeof(str), stdin) ;
        strlength = strlen(str) ;

        for(i = 0 ; i < strlength ; i++)
        {
                if((str[i] >= 'A') && (str[i] <= 'Z'))
                {
                        printf("Capital letter\n") ;
                        letter  = str[i] - 'A' ;
                        letter_count[letter] = letter_count[l] + 1  ;
                        printf("Letter %c has a count of %d\n",str[i], letter_count[i]) ;
                }
                else if((str[i] >= 'a') && (str[i] <= 'z'))
                {
                        printf("Lower case\n") ;
                        letter = str[i] - 'a' ;
                        letter_count[letter] = letter_count[l] + 1 ;
                        printf("Letter %c has a count of %d\n",str[i], letter_count[i]) ;
                }
        }

        k = 0 ;
        for( letter = 'a' ; letter <= 'z' ; letter++)
        {
                i = letter - 'a' ;
                for(j = 0 ; j <= letter_count[i] ; j++)
                {
                        strout[k] = letter ;
                        k++ ;
                }


        }
        return 0 ;
}

【问题讨论】:

    标签: c sorting alphabetical


    【解决方案1】:

    您的代码中有几个错误:

    1. for 循环中出现两次的以下行不正确:

      letter_count[letter] = letter_count[l] + 1  ;
      

      变量l 从未初始化。 正确的是,例如:

      letter_count[letter]++;
      
    2. 以下也是错误的:

      printf("Letter %c has a count of %d\n",str[i], letter_count[i]) ;
      

      字母的计数在letter_count[letter] 中,而不是在letter_count[i] 中。

    3. 循环终止条件中有off-by-one error

      for(j = 0 ; j <= letter_count[i] ; j++)
      

      应该改为j &lt; letter_count[i],否则每个字母都比需要的多一倍。

    【讨论】:

    • 非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2020-04-16
    • 2011-10-14
    • 2012-11-18
    • 2017-10-04
    • 1970-01-01
    • 2021-09-17
    相关资源
    最近更新 更多