2017-05-22 3 views
0

이 질문을 여러 번 물어 보았습니다. 그러나 내가 잘못하고있는 것이 무엇인지 알 수 없습니다. 사용자에게 문자열 입력을 요청하고 문자열에 문자가 나타나는 횟수를 계산합니다. 이것은 내 코드입니다 :C가 문자열의 발생 횟수를 계산합니다.

실행될 때마다 문자 'f'까지 발생 횟수가 인쇄됩니다. 그 후 결과는 부정확하며 일부 문자의 경우 난수가 인쇄됩니다. 누군가이 문제를 해결할 수있는 방법을 안내해 주며 내가 잘못하고있는 것을 설명해 줄 수 있습니까? 감사.

enter a string 
abc 
a: 1 
b: 1 
c: 1 
d: 0 
e: 0 
f: 32767 
g: 1 
h: 0 
i: 1434561216 
j: 32767 
k: 206176841 
l: 1 
m: 1434561248 
n: 32767 
o: 1434561248 
p: 32767 
q: 1434561272 
r: 32767 
s: 171855872 
t: 1 
u: 0 
v: 1 
w: 206173472 
x: 1 
y: 206173376 
z: 1 
+1

과 같아야'왜에만 최대 4 init을 당신은? 어느 것이 당신의'f' 문제에 대응하는 것 같습니다. – kaylum

+0

@kaylum 나는 그것을 잊어 버렸다. 나는 초기에 5 글자로 프로그램을 테스트했다. 감사. – rissandimo

+0

@rissandimo 그래서 당신 문제인가요? – kaylum

답변

1

처음 5 자까지만 초기화 할 수 있습니다. 프로그램의 주요 단점은, 예 97 또는 5위한 매직 넘버로서 사용하고

// assign alphabet number arrays to 0 
for(int i=0; i < 26; i++) 
{ 
    alphabetLowerNumbers[i] = 0; 
    alphabetUpperNumbers[i] = 0; 
} 
+1

주 :'alphabetUpperNumbers'의 선언은 또한 배열 크기를 증가시켜야합니다; 현재는 5 개의 요소 만 있으므로 5 개를 초기화하면 정의되지 않은 동작이 호출됩니다. – ShadowRanger

+0

@ShadowRanger 나는 단계별로 로직을 작성하고 싶었다. 이제는 낮은 알파벳이 제대로 작동하므로 알파벳 순으로 표시된 문자를 받아들이도록 프로그램을 마칩니다. – rissandimo

0

// assign alphabet number arrays to 0 
for(int i=0; i < 5; i++) 
{ 
    alphabetLowerNumbers[i] = 0; 
    alphabetUpperNumbers[i] = 0; 
} 

이 있어야한다. 이 루프 배열 alphabetLowerNumbers의 5 개 요소가 초기화

for(int i=0; i < 5; i++) 
{ 
    alphabetLowerNumbers[i] = 0; 
    alphabetUpperNumbers[i] = 0; 
} 

에서

. 배열의 다른 모든 요소에는 불확정 값이 있습니다.

(참고 :. 당신이 선언 대신 루프를 사용에서 배열을 초기화 할 수 예를

int alphabetLowerNumbers [26] = { 0 }; 

를 들어)

는 문자열 userInput는 용량보다 적은 문자를 포함 할 수 있습니다. 또한 0으로 끝나는 숫자 '\0'과 줄 바꿈 문자 '\n'을 포함 할 수 있습니다. 그래서이 루프.

for(int i=0; i < 30; i++) 
{ 

    int ascii = userInput[i]; // ascii 

    alphabetLowerNumbers[ascii - 97]++; 

} 

결과로 프로그램의 동작이 정의되지 않았습니다. (내가에게 = 0을 int로, 내가 <5; 내가 ++)에 대한

는 적어도 루프는`

for (size_t i = 0; userInput[i] != '\0' && userInput[i] != '\n'; i++) 
{ 
    //... 
} 
관련 문제