C++ Программа домашнее задание
-
- Уже с Приветом
- Posts: 2190
- Joined: 14 Jun 2004 15:18
C++ Программа домашнее задание
Привет, всем. Помогите, пожалуйста. Недавно начала изучать C++. Задали программу написать, где user вводит дата, а программа считает сколько там characters, сколько букв и потом сколько раз каждая буква встречается. Вот я и застряла на последнем етапе. Никак не могу написать loop, такой чтобы и каждая буква вылезала, а рядом с ней сколько раз она встречается.
Помогите люди добрые, а то скоро я уже компьютер за окно выброшу!!!
Помогите люди добрые, а то скоро я уже компьютер за окно выброшу!!!
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: C++ Программа домашнее задание
katyaever wrote:Привет, всем. Помогите, пожалуйста. Недавно начала изучать C++. Задали программу написать, где user вводит дата, а программа считает сколько там characters, сколько букв и потом сколько раз каждая буква встречается. Вот я и застряла на последнем етапе. Никак не могу написать loop, такой чтобы и каждая буква вылезала, а рядом с ней сколько раз она встречается.
Помогите люди добрые, а то скоро я уже компьютер за окно выброшу!!!
Конкретные условия в студию ну и плюс то, что вы уже написали
Я тоже сегодня начинаю курс Data Structures на С++ и тоже надо кучу всего вспоминать. Вот и вспомним на пару
Сабина
-
- Уже с Приветом
- Posts: 2190
- Joined: 14 Jun 2004 15:18
Вот пока что написала, но loop который буквы щитает не выходит!
/* Program to accept a line of characters from the user and will count how many letters
are in the line, how many total characters the line contains. It will output the total
count of letters and the occurences of each unique character which is entered by the user.
It will display the total count of each character.*/
#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;
int main()
{
const int arraySize = 256;
const int letters = 52;
int numOfLetters = 0;
int count=0;
int numOfOccurences [letters]={0};
char string[arraySize]={0};
cout << "Please enter your data. When the input is complete, please hit enter." << endl;
cin.get(string,arraySize);
cout << "The characters you entered separated by spaces are: ";
for (int i = 0; string [i] != 0; i++)
{
cout << string[i] << " ";
}
cout << endl;
cout << "The string contains " << strlen(string) << " characters." << endl;// Displays number of characters.
cout << "The letters in the data you entered are: " << endl;
for (i = 0; string [i] != 0; i++)
{
if (string[i] < 91 && string[i] > 64 || string[i] >96 && string[i] < 123)
{
numOfLetters++;
cout << string[i] << " ";
}
}
cout << endl;
cout << "Out of the characters you entered, " << numOfLetters << " are letters." << endl;
return 0;
}
/* Program to accept a line of characters from the user and will count how many letters
are in the line, how many total characters the line contains. It will output the total
count of letters and the occurences of each unique character which is entered by the user.
It will display the total count of each character.*/
#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;
int main()
{
const int arraySize = 256;
const int letters = 52;
int numOfLetters = 0;
int count=0;
int numOfOccurences [letters]={0};
char string[arraySize]={0};
cout << "Please enter your data. When the input is complete, please hit enter." << endl;
cin.get(string,arraySize);
cout << "The characters you entered separated by spaces are: ";
for (int i = 0; string [i] != 0; i++)
{
cout << string[i] << " ";
}
cout << endl;
cout << "The string contains " << strlen(string) << " characters." << endl;// Displays number of characters.
cout << "The letters in the data you entered are: " << endl;
for (i = 0; string [i] != 0; i++)
{
if (string[i] < 91 && string[i] > 64 || string[i] >96 && string[i] < 123)
{
numOfLetters++;
cout << string[i] << " ";
}
}
cout << endl;
cout << "Out of the characters you entered, " << numOfLetters << " are letters." << endl;
return 0;
}
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
katyaever wrote:/* Program to accept a line of characters from the user and will count how many letters are in the line, how many total characters the line contains. It will output the total count of letters and the occurences of each unique character which is entered by the user. It will display the total count of each character.*/
Подробно еще не посмотрела (счас всех ужином накормлю ). Но что в глаза бросается: такое ощущение, что автор задачи под characters и letters подразумевает одно и то же.
Если исходить из того, что юзер может набить любой character, а посчитать также надо сколько там всего БУКВ и сколько раз каждая буква встречается,
то по моему мнению надо сделать loop по буквам афавита и внутри loop по символам строки, сравнивать каждый ее символ с очередной буквой алфавита.
Не понятно что там с case-ом, предполагается, что они все lower case или upper case тоже возможен?
Outer loop что-то вроде
char ch='A';
for (ch = 'a'; ch <= 'z'; a++)
а внутри loop по символам строки.
(продолжение следует), если кто другой к тому времени не поможет, конечно.
Сабина
-
- Posts: 1
- Joined: 18 Jun 2004 03:57
- Location: Russia, Omsk
Можно так:
Code: Select all
int nLen = strlen(string);
for (i = 0; i < nLen; i++)
{
if (isalpha(string[i]))
{
if ((i == 0) || (find(string, string + i - 1, string[i]) == string + i - 1))
printf("Count of %c is %d\r\n", string[i], std::count(string, string + nLen, string[i]));
}
}
-
- Уже с Приветом
- Posts: 14006
- Joined: 17 Jun 2003 04:41
Начнём с мелкой придирки.
Леди, НЕ НАДО вот так писать:
Человеку, который будет это читать, придётся напрягаться , соображая, что означают магические цифры 91, 64, 96 и 123.
Напишите понятнее:
А для подсчёта букв Вам нужно завести массив целых чисел. Каждой букве соответствует своё собственное число. В начале все числа - нули. Затем, встречая букву, Вы увеличиваете "её" число на 1. В конце программы печатаете те буквы, количество которых > 0.
Поскольку Вас интересуют только латинские буквы, достаточно взять массив из 128 чисел.
Итого получаем:
P.S. Разумеется, это далеко не единственное решение.
Леди, НЕ НАДО вот так писать:
katyaever wrote:if (string[i] < 91 && string[i] > 64 || string[i] >96 && string[i] < 123)
Человеку, который будет это читать, придётся напрягаться , соображая, что означают магические цифры 91, 64, 96 и 123.
Напишите понятнее:
Code: Select all
if ( string[i] >= 'A' && string[i] =< 'Z' || string[i] >= 'a' && string[i] =< 'z' )
А для подсчёта букв Вам нужно завести массив целых чисел. Каждой букве соответствует своё собственное число. В начале все числа - нули. Затем, встречая букву, Вы увеличиваете "её" число на 1. В конце программы печатаете те буквы, количество которых > 0.
Поскольку Вас интересуют только латинские буквы, достаточно взять массив из 128 чисел.
Итого получаем:
Code: Select all
#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;
int main()
{
const int arraySize = 256;
const int letters = 52;
int numOfLetters = 0;
int count=0;
int LetterCounts[128];
char c;
int numOfOccurences [letters]={0};
char string[arraySize]={0};
cout << "Please enter your data. When the input is complete, please hit enter." << endl;
cin.get(string,arraySize);
cout << "The characters you entered separated by spaces are: ";
for (int i = 0; string [i] != 0; i++)
{
cout << string[i] << " ";
}
cout << endl;
cout << "The string contains " << strlen(string) << " characters." << endl;// Displays number of characters.
// Set all counts to 0
for (c = 0; c < 128; c++)
{
LetterCounts[c] = 0;
}
// Count letters
for (i = 0; string [i] != 0; i++)
{
if ( string[i] >= 'A' && string[i] =< 'Z' || string[i] >= 'a' && string[i] =< 'z' )
{
LetterCounts[ string[i] ]++;
}
}
cout << "The letters in the data you entered are: " << endl;
for (c = 0; c < 128; c++)
{
if (LetterCounts[c] > 0)
{
numOfLetters++;
cout << c << " - " << LetterCounts[c] << " times" << endl;
}
}
cout << "Out of the characters you entered, " << numOfLetters << " are letters." << endl;
return 0;
}
P.S. Разумеется, это далеко не единственное решение.
Не гоните, и не гонимы будете...
-
- Уже с Приветом
- Posts: 2190
- Joined: 14 Jun 2004 15:18
-
- Уже с Приветом
- Posts: 2190
- Joined: 14 Jun 2004 15:18
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
-
- Уже с Приветом
- Posts: 2190
- Joined: 14 Jun 2004 15:18
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
-
- Уже с Приветом
- Posts: 2506
- Joined: 13 Jan 2003 22:34
- Location: Kiev :: Los Angeles, CA
Девушки, начните с алгоритма. Из того что уже написано, он должен быть предельно ясным, нет? также, не устанавливайте всякие лимиты - типа 256 символов в строке, и так далее. Насколько я помню, метод который вам бы тут очень подошел называется [bin counting], или что-то в этом роде. Например, есть куча бумажек - каждая бумажка принадлежит одному из 5 видов. Как бы вы их посчитали, в жизни - разрожили бы на 5 стопок, а потом пересчитали бы каждую. Здесь то же самое. Почему не прочитать символ за символом (а не всю строку за один раз), и не расфасовать по "кучкам"? А потом не пройтись по кучкам, и все не напечатать?
Попробуйте такое написать, а потом результаты покажите. Исправим.
Попробуйте такое написать, а потом результаты покажите. Исправим.
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
Ето у Вас не С++. Ето С. С вкраплениями С++.
Если СТЛ не проходили, то ладно, иначе используйте
std::string, string::find string::replace
Прочитали строку, потом смотрим первую букву и сколько таких всего, печатаем результат, ети буквы удаляем, смотрим опьять какая первая буква и сколько таких и т.д. пока буквы есть.
Если СТЛ не проходили, то ладно, иначе используйте
std::string, string::find string::replace
Прочитали строку, потом смотрим первую букву и сколько таких всего, печатаем результат, ети буквы удаляем, смотрим опьять какая первая буква и сколько таких и т.д. пока буквы есть.
Верить нельзя никому - даже себе. Мне - можно!
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK