尝试使用argv在C中获得字符计数频率?

时间:2017-10-02 16:21:04

标签: c

我正在尝试制作这样的东西:

INPUT:

./ program aaabbbsssddd

输出:

a3b3s3d3

到目前为止,我的代码看起来像这样,但由于某种原因,我只是拉第一个字母,当我想拉每一个字母然后测试它的频率....我是C的新手,所以任何建议都会很棒:

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

int main(int argc, char **argv) {
        int x;

        if (argc < 2) {
                printf("error\n");
                return 0;
        }

        for (x = 1; x < argc; x++) {
                printf("%c",argv[x][0]);
        }
        printf("\n");

        return 0;
}

2 个答案:

答案 0 :(得分:3)

argv是一个C字符串数组; argc表示已传递了多少字符串参数,而不是字符串的长度。

由于您将一个参数传递给您的程序,因此您需要的只是argv[1]字符串。使用指针遍历其字符,当您到达空字符时停止:

if (argc != 2) {
    printf("error: pass one parameter.\n");
    return -1;
}
char *ptr = argv[1];
int count[1u + CHAR_MAX - CHAR_MIN] = {0};
while (*ptr) {
    count[(unsigned char)*ptr]++;
    ptr++;
}

现在count[i]包含传递给程序的参数中出现代码为i的字符的数字。您可以按如下方式打印计数:

for (int i = 0 ; i != 256 ; i++) {
    if (count[i]) {
        printf("'%c' : %d\n", i, count[i]);
    }
}

Demo.

答案 1 :(得分:1)

argc是您传递给程序的参数数量。

所以,在上面的例子中,argc是2,这是&#34; aaabbbsssddd&#34; , 存储在argv [1]中的,因为argv [0]是程序的名称。

所以,根据传递的参数长度修改代码。

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

int main(int argc, char **argv) {
        int x;

        if (argc < 2) {
                printf("error\n");
                return 0;
        }   

        // take a count array to maintain the counts of each character
        // set initially to zero
        int count[256] = {0};
        int len = strlen(argv[1]);
        for (x = 0; x < len; x++) 
        {   
            char c = argv[1][x];
            // Increment character count 
            count[c]++;
            //printf("%c",argv[1][x]);
        }   
        int i;
        int outputLen = 0;
        for(i=0; i < 256; i++)
        {   
            // If count is greater than zero, then print it 
            if(count[i])
            {
               // add the length of the output
                outputLen += printf("%c%d",i,count[i]);
            }
        }   

        printf("\n");

        // Here you have both input and output length 
        if(len  > outputLen)
        {
        }


        return 0;

}