2015-10-28 56 views
-3
#include <stdio.h> 
#include<string.h> 
int main() { 
    char * a; 
    int b[26] = { 
     0 
    }; 
    long r = 0; 
    scanf("%s", a); 
    int j = strlen(a); 
    for (int i = 0; i < j; i++) { 
     b[a[i] - 'a'] += 1; 
    } 
    for (int i = 0; i < 26; i++) { 
     if ((b[i]/2) * 2 == b[i]) 
      r += b[i]/2; 
     else 
      r += (b[i] + 1)/2; 
    } 
    printf("%ld", r); 
    return 0; 
} 

输入 - SSSS这个程序有什么问题?

这个程序能正常工作在我的笔记本电脑开发的C++编译器.. 但是当我上运行它ideone.com或任何其他在线编译它给运行时错误,,请告诉我这个程序有什么问题

+4

首先判断这是C或C++,并选择合适的标签。 –

回答

6

您没有为a分配内存并对其执行操作。

分配内存char* a;

,或者您也可以采取a字符数组像你这样做是为了b

1

您还没有分配任何内存a。要么通过执行char a[<some_length>];静态分配内存为char *a,要么通过使用malloc函数动态地分配内存。

1

当你给这样的东西char *a;这意味着它是一个指向字符类型的数据的指针。这里,“a”是指向需要分配的内存位置的指针。

char *a分配内存,如a=malloc(20)或者您可以直接使用数组char a[20]。它解决了你的问题。