Вопрос по С++

xZ_

Хьёзь
помогло, только не fscanf, a scanf.
fflush(stdin); не помогло...
завтра настигну препада, только врядли она что-то внятное сможет посоветовать)
p.s. да, Borland C++ 3.1
я обычно пишу
sscanf("1","%f",&tmp);
не заметно для конечного пользователя получается, без ввода лишних знаков
 
Останнє редагування:

Пух

كنت بلهاء
Модератор
Строка, содержащая произвольный русский текст, состоит не более чем из 200 символов. Написать, какие буквы и сколько раз встречаются в этом тексте.

Код:
#include <stdio.h> 
#include <string.h> 
#include <conio.h> 
 
char cnt[256]; 
 
void main() 
{ 
  char *rus="ЁёЙЦУКЕНГШЩЗХЪЫВАПРОЛДЖЭЯЧСМИТЬБЮйцукенгшщзхъфывапролджэячсмитьбю"; 
  int ch; 
  printf("Вводите текст, конец текста - Enter\n"); 
  while((ch=getchar())!=10)cnt[ch]++; 
  for(ch=0;ch<256;ch++) 
    if(strchr(rus,ch)&&cnt[ch])printf("%c - %d раз\n",ch,(int)cnt[ch]); 
}
кому не сложно, объясните алгоритм))
я так понимаю что вводится строка, сравнивается с алфавитом (строка rus), а как оно подсчитывает?!
 

Cris

Member
Строка, содержащая произвольный русский текст, состоит не более чем из 200 символов. Написать, какие буквы и сколько раз встречаются в этом тексте.

Код:
#include <stdio.h> 
#include <string.h> 
#include <conio.h> 
 
char cnt[256]; 
 
void main() 
{ 
  char *rus="ЁёЙЦУКЕНГШЩЗХЪЫВАПРОЛДЖЭЯЧСМИТЬБЮйцукенгшщзхъфывапролджэячсмитьбю"; 
  int ch; 
  printf("Вводите текст, конец текста - Enter\n"); 
  while((ch=getchar())!=10)cnt[ch]++; 
  for(ch=0;ch<256;ch++) 
    if(strchr(rus,ch)&&cnt[ch])printf("%c - %d раз\n",ch,(int)cnt[ch]); 
}
кому не сложно, объясните алгоритм))
я так понимаю что вводится строка, сравнивается с алфавитом (строка rus), а как оно подсчитывает?!
ну считываем строку, пока читается и делаем массив счетчиков для каждой буквы - cnt[256] - индекс=код символа
и потом циклом проходим по массиву и смотрим если данный индекс(i) то есть символ есть в нашем алфавите(strchr) то выводим сколько раз встречается
 

Пух

كنت بلهاء
Модератор
В файле test1.txt записаны слова в строчку(в 1 строке 1 слово, но не больше 5 штук), а в файле test.txt записан текст произвольный текст. Нужно найти сколько раз встречается слова с файла тест1 в тексте с файла тест. Есть функция, которая считает кол-во вхождений строки s0 в строку s. Написал программу, только работает для 1 слова в файле тест1... Кароче, подскажите как доделать программу, чтобы считала для всех слов с файла тест1, а не только одного...
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int countword(const char s0[], const char s[]){
   int k=0;
   int i=0;
   while (s[i]){
     int x;
       for (int j=0;s0[j];j++){
	  x=0;
	  if(j>0) i++;
	    if (s0[j]==s[i]) x=1;
	      else break;
	}
    i++;
  if (x==1) k++;
  }
 return k;
}

void main() {
   FILE *f,*f1;
   char s[50000];
   char s0[50];
   int t=0;
   clrscr();
   f=fopen("test.txt","r");
   f1=fopen("test1.txt","r");
   fgets(s0,50,f1);
    while (!feof(f)){
     fgets(s,5000,f);
     t+=countword(s0,s);
     printf("%s",s);
     s[0]='\0';
   }
   printf("slovo '%s' vstre4aetsya %d raz(a)",s0,t);
   fclose(f);
   fclose(f1);
   getch();
 }
 

Cris

Member
В файле test1.txt записаны слова в строчку(в 1 строке 1 слово, но не больше 5 штук), а в файле test.txt записан текст произвольный текст. Нужно найти сколько раз встречается слова с файла тест1 в тексте с файла тест. Есть функция, которая считает кол-во вхождений строки s0 в строку s. Написал программу, только работает для 1 слова в файле тест1... Кароче, подскажите как доделать программу, чтобы считала для всех слов с файла тест1, а не только одного...
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int countword(const char s0[], const char s[]){
   int k=0;
   int i=0;
   while (s[i]){
     int x;
       for (int j=0;s0[j];j++){
	  x=0;
	  if(j>0) i++;
	    if (s0[j]==s[i]) x=1;
	      else break;
	}
    i++;
  if (x==1) k++;
  }
 return k;
}

void main() {
   FILE *f,*f1;
   char s[50000];
   char s0[50];
   int t=0;
   clrscr();
   f=fopen("test.txt","r");
   f1=fopen("test1.txt","r");
   fgets(s0,50,f1);
    while (!feof(f)){
     fgets(s,5000,f);
     t+=countword(s0,s);
     printf("%s",s);
     s[0]='\0';
   }
   printf("slovo '%s' vstre4aetsya %d raz(a)",s0,t);
   fclose(f);
   fclose(f1);
   getch();
 }
что то страшное пишеш
Код:
#include <stdio.h>
#include <string.h>
#define N 5
#define L 100
int find(char word[], char library[N][L])
{
	for(int i=0;i<N;i++)
		if(strstr((const char*)&library[i][0],(const char*)&word[0])!=NULL) return i;
	return -1;
}
int main()
{
	FILE *test1=fopen("test1.txt","r"),*test2=fopen("test2.txt","r");
	char word[L];
	char library[N][L];
	int cnt[N]={0};
	int n=0;
	int c=0;
	while(fscanf(test1,"%s\n",&word[0])!=-1)
	{
		strcpy(library[n],(const char*)&word[0]);
		n++;
	}
	fclose(test1);
	while(fscanf(test2,"%s",&word[0])!=-1)
	{
		c=find(&word[0],library);
		if(c!=-1) cnt[c]++;
	}
	fclose(test2);
	for(int i=0;i<n;i++)
	{
		printf("%s -> %d\n",library[i],cnt[i]);
	}
	return 0;
}
как работает:
считываем сначала наш словарь в массив library
массив cnt - будет считать сколько раз попалось каждое слово
дальше считываем текст до конца со второго файла
и запускаем для каждого считаного слова поиск его в словаре -find()
нашли - увеличиваем счетчик
strstr - я использовал для сравнения двух строк, его походу надо заменить надо на strcmp
если ты не знаеш то scanf("%s") - считывает набор символом до первого пробела вроде как
 

Пух

كنت بلهاء
Модератор
Спасибо)
страшное наверное потому, что с строками практически не работал, файлы не учил вообще, а задание сделать нада...
 

blackboy

New Member
Відповідь: Вопрос по С++

Имеется Windows 7 x64, нужен компилятор для С++. Борланд не работает на х64, need help!
 
Зверху