2012-03-15 3 views
0

Мне нужно подсчитать количество прописных и строчных букв в заданной строке. Для этого назначения я должен использовать массивы символов, завершенных \ 0, что и я. Я использую код ascii для определения строчных или строчных букв. Однако выход иногда чист, иногда не чист. Любая помощь будет оценена. Вот мой код в Dev-C++. БлагодаряМои функции отображают мусор, а в некоторых других случаях он отображает чистый результат.

#include <iostream> 
#include<conio.h> 
#include<cstring> 


using namespace std; 

int getline(); 
int isupper(char line[]); 
int islower(char line[]); 


int main() 
{ 
    int Month, last_digit;  //initialize variables and char array 
    char temp[255]; 
    getline(); 

    getch(); 
    return 0; 
} 

int getline() 
{ 
    char line[255]; 
    cout << "Enter a sentence: "; 
    cin.getline (line, 255); 
    isupper(line); 
    islower(line); 
    getch(); 
    return 0; 
} 

int isupper(char line[]) 
{ 
    int y, i=0, k=0; int count_uppercase=0; char Uppercase_array[80]; 

    cout<<endl<<"from isupper function"<<endl; 
    do 
    { 
    y=line[i++]; // Convert to int 
    if(y>64 && y<91)  //if it is a Uppercase letter... 
    { 
     Uppercase_array[k]=line[i-1]; 
     k++;   
     count_uppercase++;  //increment the counter... 
    } 
    } 
    while(y); 
    cout<<"Uppercase letter = " <<Uppercase_array; 
    cout<<" number of uppercase = "<<count_uppercase<<endl; 
    cout<<"----------"<<endl; 

    return 0; 

} 

int islower(char line[]) 
{ 
    int z, i=0, count_lowercase=0; 
    cout<<"from lowercase function"<<endl; 
    do 
    { 
    z=line[i++]; // Convert to int 
    if(z>96 && z<123)  //if it is a Lowercase letter... 
    count_lowercase++;  ////increment the counter... 
    } 
    while(z); 
    cout<<"number of lowercase = "<<count_lowercase<<endl;  

    getch(); 
    return 0; 
} 

*******example1 of output***** 
Enter a sentence: Good morning Dad, how ARE u? 

from isupper function 
Uppercase found in that line = GDARE√" number of uppercase = 5 
---------- 
from lowercase function 
number of lowercase = 16 

************example2 of output********* 
Enter a sentence: Good morning Dad how are u? 

from isupper function 
Uppercase letter = GD number of uppercase = 2 
---------- 
from lowercase function 
number of lowercase = 19 
+1

Первое, что выпрыгивает на меня, заключается в том, что ваш верхний регистр не завершен нулем. – Corbin

ответ

1

Если «мусор» вы имеете в виду в GDARE√"√", то ответ, чтобы добавить нуль-терминатор \0 до последнего символа из Uppercase_array. То есть, после цикла do/while добавьте Uppercase_array[k] = '\0'.

+0

Очистить! Мне сейчас очень ясно. Я буду помнить об этом сейчас. Еще раз спасибо!! – T4000

3

Посмотрите внимательно на этой линии:

cout<<"Uppercase letter = " <<Uppercase_array; 

Как он знает, сколько символов на выходе? Вы действительно должны использовать std::string или std::vector<char>.

Если вы хотите простейшее исправление, сделайте это перед печатью: Uppercase_array[k]=0;. Строки в стиле C имеют свои концы с завершающим нулем (нулевой байт), который сообщает функциям, которые обрабатывают их, насколько они велики.

+0

Отлично, теперь он отлично работает! можете ли вы объяснить немного больше, почему Uppercase_array [k] = 0 исправил проблему? Я действительно хочу понять, почему этот линг сам решает проблему. Спасибо – T4000

+0

Может быть, более понятно, если вы пишете '\ 0', а не просто 0. Это нулевой символ, который отмечает конец строки. (Это имеет значение ASCII ноль, поэтому вы * можете * просто написать 0.) – Wyzard

+0

ясно сейчас! Я стараюсь забыть «\ 0», который завершает строку. Чем вы так много! – T4000