Programlama dersim için, bir sürücüden gelen 'str' dizesini alan bir incrementstring() işlevi yazmaya çalışıyorum ve bunlara bir tane eklerim. Hem harflerle hem de sayılarla çalışmalıdır (örn. '1' '2' ye gider, 'a' b 'ye gider,' z '' aa 'a gider,' ZZ '' AAA'ya gider). Neredeyse her test koşulu var, bir böcek bulamadığım bir böcek dışında. Ben işlevini çalıştırdığınızdaDize Arttırma İşlevi C
void incrementstring(char* str){
int i;
int j;
int length = strlen(str);
for(i = strlen(str)-1; i >= 0; i--){
if (str[i] == '9'){
str[i] = '0';
if (str[0] == '0'){
for (j = strlen(str)-1; j>=0; j--){ //This loop is the problem
str[j+1] = str[j];
}
str[0] = '1';
}
}
else if (str[i] == 'z'){
if (str[0] == 'z'){
str[i] = 'a';
str[i+1] = 'a';
}
str[i] = 'a';
}
else if (str[i] == 'Z'){
if(str[0] == 'Z'){
str[i] = 'A';
str[i+1] = 'A';
}
str[i] = 'a';
}
else{
str[i]++;
return;
}
}
}
, bu sürücü çıkışları nedir:
Bu
Şu anda ne var1. testing "1"... = 2. Correct!
2. testing "99"... = 100. Correct!
3. testing "a"... = b. Correct!
4. testing "d"... = e. Correct!
5. testing "z"... = INCORRECT: we got "aa0". We should be getting "aa" instead.
6. testing "aa"... = ab. Correct!
7. testing "Az"... = Ba. Correct!
8. testing "zz"... = aaa. Correct!
9. testing "cw"... = cx. Correct!
10. testing "tab"... = tac. Correct!
11. testing "500"... = 501. Correct!
11 tests run.
Ben işlemek için hat 9'da döngü için yazdığı ' 99 'ila' 100 'koşulu. Dizenin her dizinini alır ve birini sağa kaydırır ve ardından dizenin başına bir '1' ekler. Ancak, bu döngü bir sebepten dolayı yukarıda görüldüğü gibi 5. test koşulunu bertaraf eder. Döngüyü çıkarırsam, '99' 00'a geçer, ancak 5. test problemsiz geçecektir. Burada bir tuğla duvara çarptım ve kimsenin içgörü sunabileceğini merak ediyordum.
Yardımı takdir ediyorum, teşekkürler.
"Taşıma" işleminizden sonra (yani "dizgeyi" genişlettiğinizde), diziye NUL sonlandırıcı bir bayt eklemeniz gerekir. Tüm str [i + 1] = 'bir str [i + 2] = '\ 0'; Ayrıca ASCII karakter kümesini kabul ettiğinizi de biliyorsunuz değil mi? Yoksa bu sınıfın kapsamı dışında mı? – mpez0
Burada bir hata ayıklayıcı kullanmak yararlı olabilir. –
"Taşıma" durumunuz gerçekten her durumda işe yaramıyor: 'zaz' girmeyi deneyin - Gereksiniminizi aldım, ancak 'zaaa'ya' genişlerse, 'zba'ya dönüşmelidir. "Taşı" nızı tamamen yukarı taşıyamazsınız, ancak sadece önde gelen karakterlere bakmazsınız. – tofro