2016-04-05 17 views
0

Görevim, bir C dizesinde kaç karakter bulunduğunu saymaktır. Giriş, erişemediğim bir test sürücüsü tarafından sağlanıyor, ancak işlevimin verilere erişmesi ve kaç karakterin az ve AZ arasında değiştiğini belirlemesi gerekiyor ancak programım başarısız oluyor ve ben ne olduğundan emin değilim yanlış yapmak.C dizesinde kaç karakter bulunduğunda ara

int countLetters(char * const line) 
{ 
    char index = *line; 
    int count; 

    while(!index) 
    { 
     if (index >= 'a' && index <= 'z') 
      count++; 

     if (index >= 'A' && index <= 'Z') 
      count++; 
    } 
    return count; 

} 

cevap

0

bu

int countLetters(char * const line) 
{ 
    int index = 0; 
    int count = 0; 

    while(line[index]) 
    { 
     if (line[index] >= 'a' && line[index] <= 'z') 
      count++; 

     if (line[index] >= 'A' && line[index] <= 'Z') 
      count++; 

     index++; 
    } 
    return count; 
} 

Burada yanlış
İlk yaptıklarını oluyor deneyin: Eğer karakter indeksi atamak = * hattını; endeks pozisyonunu temsil etmek varsayalım çünkü değil karakter, Dizininizi yanlış dize, ilk karakter yapma
İkincisi: Sen döngü diğer dizeyi
Üçüncü indeksini artırmak için herhangi bir mekanizma sağlar yoktu : Sen değişkeni sayımı başlatmak yoktu

Not: line[index]*(line + index)
sizin line aynıdır ilk karaktere işaret eden bir gösterici olduğunu
Yani line + index * Eğer ben bu işaretçi noktası için

+0

> başlatmak deneyin bu içeriği bilmek istiyorum söylüyorsun
bir ile bir işaretçi önüne tarafından dize içindeki dizin-inci karakterden işaret göstericisidir 0 = 0 = Bunu denedim ve farkı yerine getirdim. Sorun NULL karakteri eksik programdan geliyorsa ya da benim ifadelerimdeki parametreler yanlış ise emin değilim. Çoğu zaman benim dönüş değerinim, ~ 50 – RyeMan

+0

olması gerektiğinde binlercedir. Bir şekilde indeksinizi arttırmanız gerekir. Her döngü – rocketspacer

+0

Tamam, mükemmel çalışıyor, ancak çalışıyor, ancak her seferinde -1 kapalı. Kodunu değiştirdim (satır (index ++) + 1]) 'code' düzelti ama neden olduğunu tam olarak anlamıyorum. – RyeMan