2014-02-08 2 views
-1

두 개의 정수를 입력하면 결과의 차이가 올바르게 나타납니다. 그러나 문자열과 숯을 입력 할 때 문자열에 char가 몇 번이나 반환되는지 알려주지 않고 -1을 반환합니다. 아무도 나를 도울 수 없습니까? C++을 배운 것은 제 2 일입니다 ...C++ 함수 오버로드가 char을 식별 할 수 없습니다.

#include <iostream> 
#include <cstdio> 
#include <cstdlib> 
#include <cstring> 

void mycount(int a, int b) 
{ 
     std::cout<< a - b <<std::endl; 
} 

void mycount(char str[], char s[]) 
{ 
     int len,i; 
     int sum=0; 

     len = strlen(str); 
     for (i=0;i<len;i++){ 
      if (strncmp(&str[i],&s[0],1) == 0){ 
      sum = sum + 1; 

}; 
}; 
printf("results: %d times\n",sum); 
} 

int main() 
{ 
     int a,b; 
     char c[200],d; 
     if(std::cin>> a >> b){ 
      mycount(a,b); 
     } 
     if(std::cin>> c[200] >> d){ 
      mycount(a,b); 
     } 
     else{ 
      std::cout<< "-1" <<std::endl; 
     } 
     std::cin.clear(); 
     std::cin.sync(); 
} 
+0

왜 'cin'에서 'c [200]'으로 어떤 것을 추출하려고합니까? 범위를 벗어났습니다. 가장 좋은 추측은 전체 문자열을 입력하는 반면'c [200]'은 단지 하나의'char'입니다. 'eof' 플래그가 설정되고'cin'은'false'로 평가 될 것입니다. – JorenHeit

+0

@JorenHeit는 mycount()라는 두 개의 오버로드 된 함수를 제공하는 프로그램을 작성합니다. 이 함수는 정수가 전달되면 첫 번째와 두 번째 매개 변수의 차이를 누적하거나 문자열과 문자가 전달 된 경우 문자가 나오는 횟수를 계산합니다. – JuneWitt

+0

문자열을 전달하지 마십시오 – JorenHeit

답변

0

힌트 -이 프로그램의 인쇄 내용은 무엇입니까?

#include <iostream> 

using namespace std; 

int main() 
{ 

    char c[200],d; 

    cout << sizeof(c) << endl; 
    cout << sizeof(d) << endl; 

    return 0; 
} 

답변 :

200

1

은 그 선언이 당신이 그것을 않는 생각하지 않습니다 - C 200 개 문자의 배열은, D는 하나의 문자입니다.

int *c, d; 

C는 int로 포인터가 D는 INT이다 : 그것이 동일한 C 선언 구문 기능,이다.

당신이 C++을하고 있기 때문에, 당신의 삶을 편하게 만들고 std :: string을 대신 사용하지 않을까요?

0

몇 가지 변경 사항으로 문제를 해결할 수 있습니다. 먼저 cin으로 배열을 입력 할 때 getline을 사용하고 바로 앞에 ignore을 호출하십시오. 나는 size의 배열 대신에 char를 전달하는 것이 더 쉽다는 것을 발견했다. a와 b 대신에 c와 d를 사용하여 두 번째 호출을 확인하라.

#include <iostream> 
#include <cstdio> 
#include <cstdlib> 
#include <cstring> 

void mycount(int a, int b) 
{ 
     std::cout<< a - b <<std::endl; 
} 

void mycount(char str[], char s) 
{ 
     int len,i; 
     int sum=0; 

     len = strlen(str); 
     for (i=0;i<len;i++){ 
      if (strncmp(&str[i],&s,1) == 0){ 
      sum = sum + 1; 

}; 
}; 
printf("results: %d times\n",sum); 
} 

int main() 
{ 
     int a,b; 
     char c[200],d; 
     if(std::cin>> a >> b){ 
      mycount(a,b); 
     } 
     std::cin.ignore(); 
     if(std::cin.getline (c,200) && std::cin >> d){ 
      mycount(c,d); 
     } 
     else{ 
      std::cout<< "-1" <<std::endl; 
     } 
     std::cin.clear(); 
     std::cin.sync(); 
} 

이러한 변경 사항으로 인해 수정되어야합니다.

+0

대단히 감사합니다! – JuneWitt

관련 문제