Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2009, 15:23   #1
Влад-mego
Пользователь
 
Регистрация: 27.11.2008
Сообщений: 16
По умолчанию Работа со строками. Си

Код:
#include <iostream.h>
#include<string.h>
#include <fstream.h>
#include<math.h>
#include<conio.h>
#include <stdio.h>
int n,s;
const int N=1000;
int i,m;
char A[N];
char B[N];
char C[N];

void InpF1()
{
FILE *q;


q=fopen("C:\\pervoe.txt","r");
fgets(A,N-1,q);
strcat(A,'\0');
cout<<A;
fclose(q);
}
void InpF2()
{
FILE *l;
int m;

l=fopen("C:\\vtoroe.txt","r");
fgets(B,N-1,l);
strcat(B,'\0');
cout<<"\n"<<B<<"\n";
fclose(l);
}
void InpF3()
{
fstream M;

int k;
M.open("C:\\tretie.txt",ios::out);

for(k=0;k<=n;k++)

{ M<<C[N];
}
M.close();
}
int main()
{
int y,p,t;


InpF1();
InpF2();


char* s;
int l,q;

char strstr_cnt(const char *A,const *B);
{
int i,j,k,count =0;
for (q=0;A[q];q++)
for (l=q,k-=0;A [l]==B[k];l++,k++)
if (!B [k+1] )
count++;

cout<<k<<" "<<"sum str: "<<count<<endl;
return 0;}}
эта прога должна находить количество вхождений первой подстроки во вторую..ток почему то не находит незнаете где ошибка?(

Последний раз редактировалось Stilet; 23.03.2009 в 11:42.
Влад-mego вне форума Ответить с цитированием
Старый 22.03.2009, 21:59   #2
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

Код:
int strstr_cnt(const char *Src,const char *Sub)
{
  int count = 0;
  int len = strlen(Src);
  for(int i=0; i<len; i++)
  {
    if(Sub[0]==Src[i])
    {
	bool is = true;
	for(int j=0; j<strlen(Sub); j++)
	if(i+j<len)
	{
                 if(Sub[j]!=Src[i+j]) is=false;
	}
	else is=false;
	if(is) count++;
     }
  }
  return count;
}
int main()
{
  InpF1();
  InpF2();
  int count = strstr_cnt(A, B);
  cout<<"sum str: "<<count<<endl;
  return 0;
}
Svetlag вне форума Ответить с цитированием
Старый 22.03.2009, 22:59   #3
Влад-mego
Пользователь
 
Регистрация: 27.11.2008
Сообщений: 16
По умолчанию

спасибо огромное))
ток вот если я ввожу 121121121 и пытаюсь найти 121 выводит не то...что делать??_

Последний раз редактировалось Влад-mego; 22.03.2009 в 23:04.
Влад-mego вне форума Ответить с цитированием
Старый 23.03.2009, 08:42   #4
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

Единственное, что убрала в функциях InpF1 и InpF2 строки strcat(A,'\0'); и strcat(B,'\0'); соответственно. Считает верно.
Приведите код и файлы txt, по которым неверно считается.
Svetlag вне форума Ответить с цитированием
Старый 23.03.2009, 11:05   #5
Nomlpppp
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 51
По умолчанию

Код:
#include<stdio.h>
#include<string.h>
#include<conio.h>






int main()
 {
 int i, j, cnt, sign;
 char str[] = "СтрокаСтрокаТестТестСтрокаТестовая", *ptr, *p=str;

 char findstr[] = "Тестовая";


 for( cnt=0; *p; p++ )
  {
  for( sign=1, i=0; i<strlen(findstr); i++ )
   {
   if( p[ i ]!=findstr[ i ] )
    {
    sign = 0;
    break; 
    }
   }
  if( sign ) ++cnt;
  }


 printf( "%d\n", cnt );
 getch();

 return 0;
 }

Сколько раз входит подстрока "222" в строку "222222"?
Ответ 4.
Nomlpppp вне форума Ответить с цитированием
Старый 23.03.2009, 17:01   #6
Влад-mego
Пользователь
 
Регистрация: 27.11.2008
Сообщений: 16
По умолчанию

Svetlag
вот смотри при твоем коде...
допустим беру строку 123123123
и хочу найти подстроку 123 ...находит ток первую единицу а вот 2 и 3 не находит
спасибо что помогаешь)

Nomlpppp


вот вы предстаили код
а почему в 222222
подстроку 222 будет находиь 4 раза а не 2??

и еще я хотел бы узнать можно ли как нибудь упростить программы засчет функций библиотеки <string.h> просто препод говорит чтоб было меньше обращений к массиву а больше функций..

Последний раз редактировалось Stilet; 24.03.2009 в 08:38.
Влад-mego вне форума Ответить с цитированием
Старый 24.03.2009, 04:03   #7
Nomlpppp
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 51
По умолчанию

Влад-mego
строка AAAAAA, подстрока AAA

Вхождения:
AAAAAA
AAAAAA
AAAAAA
AAAAAA
Nomlpppp вне форума Ответить с цитированием
Старый 24.03.2009, 10:12   #8
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

С использованием string можно так.
Код:
#include <iostream>
#include <string>

using namespace std;
int strstr_cnt(const string Src, const string Sub)
{
  string s = Src;
  int count = 0;
  int pos = s.find(Sub);
  while(pos!=-1)
  {
	  count++;
	  s = s.substr(pos+1);
	  pos = s.find(Sub);
  }
  return count;
}
int main()
{
  char A[10] = "123123123";//исходные данные
  char B[10] = "123";

  int count = strstr_cnt(string(A), string(B));
  cout<<"sum str: "<<count<<endl;
  return 0;
}
Svetlag вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками в С++ Алекс...))) Помощь студентам 1 04.02.2009 19:48
Работа со строками. ViNcHeStEr Помощь студентам 6 29.06.2008 08:14
С, работа со строками Надюха Помощь студентам 2 29.05.2008 13:07
Работа со строками Nividimka Помощь студентам 11 03.03.2007 15:58