我的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv) {
int x;
if (argc != 2) {
printf("error\n");
return -1;
}
char *ptr = argv[1];
int count[256] = {0};
while (*ptr) {
if(!isdigit(*ptr)){
count[(unsigned char)*ptr]++;
ptr++;
}
else{
printf("error\n");
return -1;
}
}
int i;
int compCount = 0;
for (i = 0 ; i != 256 ; i++) {
if (count[i]) {
// compCount += printf("%c%d",i,count[i]);
compCount +=2;
}
}
int j;
if(compCount > strlen(argv[1])){
printf("%s\n", argv[1]);
}else{
for(j=0; j!=256;j++){
if(count[j]){
printf("%c%d",j,count[j]);
}
}
}
}
我正在尝试处理我提供的一些测试用例。例如,我的代码在此测试用例中断:
有关如何解决这个问题的任何建议吗?
答案 0 :(得分:1)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// dst needs to at least strlen(src)*2+1 in size.
void encode(char* dst, const char* src) {
while (1) {
char ch = *src;
if (!ch) {
*dst = 0;
return;
}
size_t count = 1;
while (*(++src) == ch)
++count;
*(dst++) = ch;
dst += sprintf(dst, "%zu", count);
}
}
int main(int argc, char** argv) {
if (argc != 2) {
fprintf(stderr, "usage\n");
return 1;
}
const char* src = argv[1];
char* dst = malloc(strlen(src)*2+1);
encode(dst, src);
printf("%s\n", dst);
free(dst);
return 0;
}
$ gcc -Wall -Wextra -pedantic -std=c99 -o a a.c
$ ./a aabccccccggeeecccccd
a2b1c6g2e3c5d1
$ ./a abc
a1b1c1
答案 1 :(得分:-1)
代码甚至没有编译,因为它有2个错误。主要的是esdigit函数已定义,但提到此过程的liberia(c {(= INDEX(A:A,MATCH(LARGE(((B:B>=0.9)+0)*(C:C),1),((B:B>=0.9)+0)*(C:C),0))
))未包括在内。
另一个错误是声明了变量x但未使用
#include <ctype.h>