Sabina wrote:Вот это у меня работает.
Я позволю себе опять попридираться:
Придирка №1:
Code: Select all
...
char charsOfString[80]; //array to hold chars of string (80 chars per line -max line length?)
int totalChars = 0; //total chars in line
...
while ((charsOfString[totalChars] = cin.get()) != '\n')
Где проверка на длину строки?
![Confused :?](./images/smilies/icon_confused.gif)
Access violation хотите?
![No-No! :nono#:](./images/smilies/nono.gif)
Должно быть:
Code: Select all
while ((totalChars < 79) && (charsOfString[totalChars] = cin.get()) != '\n')
{
totalChars = totalChars + 1;
}
charsOfString[totalChars] = '\n';
Придирка №2:
Условие "главного" цикла лучше заменить на
i < totalChars. Элемент с индексом totalChars равен '\n', и для него этот цикл вообще выполнять не нужно.
А все предыдущие элементы не равны '\n'. Поэтому
if (buff !='\n') внутри цикла можно выкинуть.
Таким образом, "главный" цикл выглядит следующим образом:
Code: Select all
//loop by chars trough the string
for (int i = 0; i < totalChars; i++)
{
buff = charsOfString[i]; //buffer to hold current char
//loop to count ocuurences of each char
charOccurs = 0;
for (int j = 0; j <= totalChars; j++)
{
if (buff == charsOfString[j])
charOccurs = charOccurs +1;
}
cout << "Character " << buff << " has " << charOccurs << " occurences in the line." << endl;
//check if letter
if ((buff >= 'a' && buff <='z') || (buff >= 'A' && buff <='Z'))
{
numOfLetters = numOfLetters + 1;
}
}
Придирка №3: (specially for Sabina
![Razz :P](./images/smilies/icon_razz.gif)
) В последнем if-е (в том, который "check if letter") должно быть
...(buff >= 'A' && buff <='Z'), а не так, как у Вас написано.
Ну и по мелочам (хотя это уже не обязательно, только ради эстетства):
- Вместо
totalChars = totalChars + 1 лучше писать
totalChars++
- В качестве признака конца строки более традиционно использовать 0, а не '\n'. Т.е. в условии цикла
while, разумеется, оставляем '\n', а вот в идущем после него присваивании и в во всём дальнейшем коде - 0.
Не гоните, и не гонимы будете...