Google Code Jam uygulama sorununda bir grupla çalışıyordum (okuyabilirsiniz here). aşağıdaki gibidir kodudur:C Karakter dizileriyle beklenmedik girişler
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
main(){
int c;
int n = 0;
int l = 0;
int d = 0;
int caseCount = 0;
int i = 0;
int j = 0;
//A boolean value used in determining parenthesees.
bool letBool = false;
//A boolean value used in determining something;
bool wordBool = false;
//Temporary space for test characters
char test[1000];
//Gets word length
while((c=getchar())!=' ' && c!= '\n'){
l = (l * 10) + c - '0';
//printf("%d\n", l);
}
//Gets number of valid words.
while((c=getchar())!=' ' && c!= '\n'){
d = (d * 10) + c - '0';
//printf("%d\n", d);
}
//Gets number of test cases.
while((c=getchar())!= '\n'){
n = (n * 10) + c - '0';
//printf("%d\n", n);
}
//Array of all valid words.
char dict[d][l];
c=getchar();
//While we still have words to read in.
while(i < d){
//If not new line
if(c!='\n'){
//Then read character
dict[i][j] = c;
}
else{
i++;
j=0;
}
c=getchar();
j++;
}
i = 0;
j = 0;
while(i < n){
j = 0;
while((c=getchar())!='\n' && c!=EOF){
putchar(c);
test[j] = c;
j++;
}
putchar('\n');
test[j+1] = '\0';
printf("%s\n", test);
int word = 0;
//Going through valid words
while(word < d){
wordBool=true;
j = 0;
int letter = 0;
//Going through valid letters
while(letter < l){
letBool=false;
if(test[j] == '('){
while(test[j++]!=')'){
if(dict[word][letter]==test[j]){
letBool=true;
//printf("%s%d%s%d\n" "letBool is true at word: ", word, "letter: ", letter);
}
}
}
else{
if(test[j]==dict[word][letter]){
letBool=true;
//printf("%s%d%s%d\n" "letBool is true at word: ", word, "letter: ", letter);
}
}
j++;
letter++;
if(!letBool){
wordBool=false;
//printf("%s%d%s%d\n" "wordBool is false at word: ", word, "letter: ", letter);
}
}
if(wordBool){
caseCount++;
}
word++;
}
printf("%s%d%s%d\n", "Case #", i+1, ": ", caseCount);
i++;
j=0;
caseCount=0;
}
}
sorun çıktı doğru dışarı putchar ile "alınan yabancı kod" bölümü için giriş okumaya görünüyor, ama test durumu girildiğinde, bu bozulur. biz bu girişi verdiğinde
while((c=getchar())!='\n' && c!=EOF){
putchar(c);
test[j] = c;
j++;
}
putchar('\n');
test[j+1] = '\0';
printf("%s\n", test);
: Burada söz ediyorum parçasıdır
3 5 4
abc
bca
dac
dbc
cba
(ab)(bc)(ca)
abc
(abc)(abc)(abc)
(zyx)bc
biz Yani
ab)(bc)(ca)
ab)(bc)(ca)
7
Case #1: 0
abc
abc
b
Case #2: 1
(abc)(abc)(abc)
(abc)(abc)(abc)
Case #3: 0
(zyx)bc
(zyx)bcb
Case #4: 0
(
Case #5: 0
olsun, biz rastgele vardır nedenini anlayamıyorum 7 ve b gibi karakterler yazdırılır.
test[j+1] = '\0';
Buna: Bu
bir hata burada: 'testi [j +1] = '\ 0'; '' [j] = '\ 0'; 'olmalıdır, çünkü j' önceden bir önceki karakter dizinini geçmiştir. –
Yardım için çok teşekkür ederim! – MegaZeroX
Bu bir yarışma sitesidir. Sorunu kendiniz çözmeniz gerekiyor. Hatta bir cevap arayabilirsin, her zaman 'hile' siteleri vardır. –