我正在尝试制作这样的东西:
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;
}
答案 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]);
}
}
答案 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;
}