помогите с кодом в С++
Код:
case 3:
for (d=0;d<m;d++)
{
for (e=1;e<m;e++)
{
if (strlen(mas[e])>strlen(mas[e-1]))
{
swap(mas[e],mas[e-1]);
}
}
}
cout<<"Самое длинное слово:"<<mas[0]<<endl;
buff1=new char(sizeof(mas[0]));
buff1=mas[0];
break;
case 4:
k=0,n=0;
for(int y=0; y<sizeof(mas[0]);y++)
{
if (mas[y]==buff1)
{
k++;
}
}
cout<<"встречается в тексте:"<<k<<endl;
break;
for (d=0;d<m;d++)
{
for (e=1;e<m;e++)
{
if (strlen(mas[e])>strlen(mas[e-1]))
{
swap(mas[e],mas[e-1]);
}
}
}
cout<<"Самое длинное слово:"<<mas[0]<<endl;
buff1=new char(sizeof(mas[0]));
buff1=mas[0];
break;
case 4:
k=0,n=0;
for(int y=0; y<sizeof(mas[0]);y++)
{
if (mas[y]==buff1)
{
k++;
}
}
cout<<"встречается в тексте:"<<k<<endl;
break;
в кайсе 3 он находит самое длинное слово, в 4 он должен находить сколько раз оно встречаеться, но он находит только его самого и выводит цыфру 1!
помогите пожалйста срочно надо!!!!
Код:
#include <iostream>
#include <string.h>
#define is_alpha(c) \
((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || \
(c >= 'а' && c <= 'я') || (c >= 'А' && c <= 'Я'))
typedef const char cchar;
cchar* maxlen(cchar* s, cchar** e);
int repeat_w(cchar* s, cchar* f, cchar* l);
int main(void)
{
cchar *s = "Abacan, tula, abacan kansk abacan, abacan";
cchar* p, *e;
p = maxlen(s, &e);
std::cout.write(p, (e - p));
std::cout << " = " << repeat_w(s, p, e);
std::cin.get();
return 0;
}
// функция возвращает максимальное слово
cchar* maxlen(cchar* s, cchar** e) {
int n = 0;
cchar* p, *p1, *p2;
while(*s) {
for(p = s; *p && is_alpha(*p); *p++);
if((p - s) > 0) {
if((p - s) > n) {
n = p - s;
p1 = s;
p2 = p;
}
s = p;
} else
*s++;
}
*e = p2;
return p1;
}
// функция подсчитывает слово сколько раз оно встречается
int repeat_w(cchar* s, cchar* f, cchar* l) {
int n = 0;
for(;*s; ++s) {
if(is_alpha(*s)) {
if(! strncmp(s, f, l - f)) {
if(! is_alpha(*(s + (l-f)))) {
++n;
s += (l - f) - 1;
}
}
}
}
return n;
}
#include <string.h>
#define is_alpha(c) \
((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || \
(c >= 'а' && c <= 'я') || (c >= 'А' && c <= 'Я'))
typedef const char cchar;
cchar* maxlen(cchar* s, cchar** e);
int repeat_w(cchar* s, cchar* f, cchar* l);
int main(void)
{
cchar *s = "Abacan, tula, abacan kansk abacan, abacan";
cchar* p, *e;
p = maxlen(s, &e);
std::cout.write(p, (e - p));
std::cout << " = " << repeat_w(s, p, e);
std::cin.get();
return 0;
}
// функция возвращает максимальное слово
cchar* maxlen(cchar* s, cchar** e) {
int n = 0;
cchar* p, *p1, *p2;
while(*s) {
for(p = s; *p && is_alpha(*p); *p++);
if((p - s) > 0) {
if((p - s) > n) {
n = p - s;
p1 = s;
p2 = p;
}
s = p;
} else
*s++;
}
*e = p2;
return p1;
}
// функция подсчитывает слово сколько раз оно встречается
int repeat_w(cchar* s, cchar* f, cchar* l) {
int n = 0;
for(;*s; ++s) {
if(is_alpha(*s)) {
if(! strncmp(s, f, l - f)) {
if(! is_alpha(*(s + (l-f)))) {
++n;
s += (l - f) - 1;
}
}
}
}
return n;
}
а если их несколько? :)
слова беруться из файла:( мне на основании моего кода бы :(( я не могу понять ваш :(
Вот тут у вас как то страно
Код:
buff1=new char(sizeof(mas[0]));
buff1=mas[0];
buff1=mas[0];
Код:
#include <iostream>
#include <fstream>
#include <locale>
using namespace std;
struct List
{
char word[30];
int count;
List* next;
}*head;
void FindLongWord(fstream& File);
char* ToLower(char* aWord);
bool GetWordIsExist(char *aWord);
void AddToList(char* aWord);
void Out();
void FreeMemmory();
int main()
{
setlocale(LC_ALL,"Russian");
fstream File("myText.txt");
if(!File.is_open())
{
cout<<"Не могу открыть файл"<<endl;
system("pause");
return -1;
}
head = NULL;
FindLongWord(File);
Out();
FreeMemmory();
File.close();
cout<< endl;
system("pause");
return 0;
}
void FindLongWord(fstream& File)
{
List* ptr = NULL;
char aWord[30];
size_t LongLen = 0;
while(!File.eof())
{
File >> aWord;
strcpy_s(aWord,ToLower(aWord));
cout << aWord << endl;
if(LongLen <= strlen(aWord))
{
if(LongLen < strlen(aWord))
{
LongLen = strlen(aWord);
if(head == NULL)
{
AddToList(aWord);
}
else
{
FreeMemmory();
AddToList(aWord);
}
}
else
{
bool flag = GetWordIsExist(aWord);
if(flag == false)
{
AddToList(aWord);
}
}
}
}
}
bool GetWordIsExist(char* aWord)
{
List* ptr = head;
bool flag = false;
while(ptr!=NULL)
{
if(strcmp(ptr->word, aWord) == 0)
{
flag = true;
ptr->count+=1;
break;
}
ptr = ptr->next;
}
return flag;
}
void Out()
{
List* ptr = head;
int count = 0;
while(ptr != NULL)
{
count++;
cout << "#" << count << ":" << endl;
cout << "Длинное слово: " << ptr->word << endl;
cout <<"Кол-во раз встречается: " << ptr->count << endl;
ptr = ptr->next;
}
}
void FreeMemmory()
{
List *ptr = head, *tmp = NULL;
while(ptr->next != NULL)
{
tmp = ptr->next;
delete[] ptr;
ptr = tmp;
}
delete[] ptr;
head = NULL;
}
void AddToList(char* aWord)
{
List* ptr = NULL;
if(head == NULL)
{
List* ptr = new List;
strcpy_s(ptr->word, aWord);
ptr->count = 1;
ptr->next = NULL;
head = ptr;
}
else
{
ptr = new List;
strcpy_s(ptr->word, aWord);
ptr->count=1;
ptr->next = head;
head = ptr;
}
}
char* ToLower(char* aWord)
{
int len = strlen(aWord);
locale loc("");
for(int idx=0; idx<len; idx++)
{
aWord[idx] = tolower(aWord[idx],loc);
}
return aWord;
}
#include <fstream>
#include <locale>
using namespace std;
struct List
{
char word[30];
int count;
List* next;
}*head;
void FindLongWord(fstream& File);
char* ToLower(char* aWord);
bool GetWordIsExist(char *aWord);
void AddToList(char* aWord);
void Out();
void FreeMemmory();
int main()
{
setlocale(LC_ALL,"Russian");
fstream File("myText.txt");
if(!File.is_open())
{
cout<<"Не могу открыть файл"<<endl;
system("pause");
return -1;
}
head = NULL;
FindLongWord(File);
Out();
FreeMemmory();
File.close();
cout<< endl;
system("pause");
return 0;
}
void FindLongWord(fstream& File)
{
List* ptr = NULL;
char aWord[30];
size_t LongLen = 0;
while(!File.eof())
{
File >> aWord;
strcpy_s(aWord,ToLower(aWord));
cout << aWord << endl;
if(LongLen <= strlen(aWord))
{
if(LongLen < strlen(aWord))
{
LongLen = strlen(aWord);
if(head == NULL)
{
AddToList(aWord);
}
else
{
FreeMemmory();
AddToList(aWord);
}
}
else
{
bool flag = GetWordIsExist(aWord);
if(flag == false)
{
AddToList(aWord);
}
}
}
}
}
bool GetWordIsExist(char* aWord)
{
List* ptr = head;
bool flag = false;
while(ptr!=NULL)
{
if(strcmp(ptr->word, aWord) == 0)
{
flag = true;
ptr->count+=1;
break;
}
ptr = ptr->next;
}
return flag;
}
void Out()
{
List* ptr = head;
int count = 0;
while(ptr != NULL)
{
count++;
cout << "#" << count << ":" << endl;
cout << "Длинное слово: " << ptr->word << endl;
cout <<"Кол-во раз встречается: " << ptr->count << endl;
ptr = ptr->next;
}
}
void FreeMemmory()
{
List *ptr = head, *tmp = NULL;
while(ptr->next != NULL)
{
tmp = ptr->next;
delete[] ptr;
ptr = tmp;
}
delete[] ptr;
head = NULL;
}
void AddToList(char* aWord)
{
List* ptr = NULL;
if(head == NULL)
{
List* ptr = new List;
strcpy_s(ptr->word, aWord);
ptr->count = 1;
ptr->next = NULL;
head = ptr;
}
else
{
ptr = new List;
strcpy_s(ptr->word, aWord);
ptr->count=1;
ptr->next = head;
head = ptr;
}
}
char* ToLower(char* aWord)
{
int len = strlen(aWord);
locale loc("");
for(int idx=0; idx<len; idx++)
{
aWord[idx] = tolower(aWord[idx],loc);
}
return aWord;
}
Код:
Фстречаеться встречаеться самое длинное слово! Встречаеться фстречаеться
Код:
фстречаеться
встречаеться
самое
длинное
слово!
встречаеться
фстречаеться
#1:
Длинное слово: встречаеться
Кол-во раз встречается: 2
#2:
Длинное слово: фстречаеться
Кол-во раз встречается: 2
Для продолжения нажмите любую клавишу . . .
встречаеться
самое
длинное
слово!
встречаеться
фстречаеться
#1:
Длинное слово: встречаеться
Кол-во раз встречается: 2
#2:
Длинное слово: фстречаеться
Кол-во раз встречается: 2
Для продолжения нажмите любую клавишу . . .