Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
101 / 102 / 43
Регистрация: 06.03.2012
Сообщений: 478
1

Вхождение подстроки в строку

19.12.2013, 00:48. Показов 921. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не правильно считает вхождение подстроки в строку,данные читаются из файлов.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
int _tmain()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251 );
 
    //Чтение из файла
    int k, cnt = 0;
    char s[4000] = "";
    char q[256];
 
    ifstream filestr("Kniga1.txt");
    
     while (!filestr.eof()) {
        filestr.getline (s,4000);
            cout<<s<<endl;
     }
 
     filestr.close();
 
     ifstream SearchStr("Podstroka.txt");
 
      while (!SearchStr.eof())  {
        SearchStr.getline(q,256);
            cout<<q<<endl;
     }
 
      SearchStr.close();
 
    //Консоль
    /*const int n = 10;
 
    srand((unsigned)time(NULL));
 
    int k, cnt = 0;
    char s[] = "You can find books on literature, physics, history, chemistry, geography, biology and other subjects";
    char q[256];
 
    cout<<s<<endl<<endl;
 
    cout << "Введите строку для поиска:\n"; 
    cin.getline(q,256);*/
 
    //Кол-во вхождений
    for(int i = 0; i < strlen(s); ++i)
    {
        char tmp[500] = "";
        k = 0;
        if(s[i] == q[0])
        {
            for(int j = i; j <= strlen(q); ++i)
                tmp[k++] = s[j];
 
            if(strcmp(q, tmp))
                ++cnt;
                
            i += strlen(q) - 1;
        }
    }
 
    cout<<"Колличество шаблонов: "<<cnt<<endl;
Вложения
Тип файла: txt Kniga1.txt (5.6 Кб, 4 просмотров)
Тип файла: txt Podstroka.txt (2 байт, 4 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2013, 00:48
Ответы с готовыми решениями:

Вхождение подстроки в строку
Написать функцию , котоpая находит пеpвую по поpядку позицию вхождения подстpоки в указанную...

Вхождение подстроки в строку
Реализовать поиск вхождения подстроки в строку.Сначала осуществляется ввод двух строк, затем...

Найти последнее вхождение подстроки в строку
Нужно нати последнее вхождение определенной подстроки в строку. Help!

Найти первое вхождение в строку заданной подстроки
Без использования функций стандартной библиотеки выполнить задание: найти первое вхождение в строку...

4
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
19.12.2013, 01:02 2
вот может адаптируете под чтение из файлов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <string>
 
std::size_t GetTemplatesCountInString(const std::string& str, const std::string& templ)
{
  if (str.empty() || templ.empty())
  {
    return 0;
  }
 
  std::size_t count = 0;
  std::string::size_type offset = 0;
  while (true)
  {
    const std::string::size_type templPos = str.find(templ, offset);
    if (templPos == std::string::npos)
    {
      break;
    }
 
    ++count;
 
    offset = templPos + templ.size();
    if (offset > str.size())
    {
      break;
    }
  }
 
  return count;
}
 
int main()
{
  const std::string str = "aa aa, aa, aa bb";
  const std::string templ = "aa";
  std::cout << "templates count = " << GetTemplatesCountInString(str, templ) << std::endl;
  return 0;
}
0
101 / 102 / 43
Регистрация: 06.03.2012
Сообщений: 478
19.12.2013, 01:11  [ТС] 3
DU, такие же результаты,как и в моём случае
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
19.12.2013, 01:28 4
хз. может быть дело в кодировке. вот если читать бинарно файлы, у меня выходит:

str size = 5779
templ size = 2
templates count = 14

регистр при поиске учитывается. т.е. Эт искать не будет. только эт


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <string>
#include <fstream>
#include <iterator>
 
std::size_t GetTemplatesCountInString(std::string str, const std::string& templ)
{
  if (str.empty() || templ.empty())
  {
    return 0;
  }
 
  std::size_t count = 0;
  std::string::size_type offset = 0;
  while (true)
  {
    const std::string::size_type templPos = str.find(templ, offset);
    if (templPos == std::string::npos)
    {
      break;
    }
 
    ++count;
 
    offset = templPos + templ.size();
    if (offset > str.size())
    {
      break;
    }
  }
 
  return count;
}
 
std::string ReadDataFromFile(const std::string& filePath)
{
  std::ifstream file;
  file.exceptions(std::ios::badbit | std::ios::failbit);
  file.open(filePath, std::ios::in | std::ios::binary);
  return std::string((std::istreambuf_iterator<char>( file ) ), std::istreambuf_iterator<char>());
}
 
int main()
{
  const std::string str = ReadDataFromFile("d:\\tmp\\Kniga1.txt");
  const std::string templ = ReadDataFromFile("d:\\tmp\\Podstroka.txt");
  std::cout << "str size = " << str.size() << std::endl;
  std::cout << "templ size = " << templ.size() << std::endl;
  std::cout << "templates count = " << GetTemplatesCountInString(str, templ) << std::endl;
  return 0;
}
Добавлено через 4 минуты
для учета регистра начинается совсем другая история. там конвертить в юникод нужно или с локалями колдовать. в общем не английским тестом придется помучится. оставляю это вам
1
101 / 102 / 43
Регистрация: 06.03.2012
Сообщений: 478
19.12.2013, 01:52  [ТС] 5
DU, спасибо,вроде как заработало))
0
19.12.2013, 01:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2013, 01:52
Помогаю со студенческими работами здесь

Первое вхождение подстроки в строку (Алгоритм Боуера-Мура)
Разработать программу, которая в строке с N>255 символов находит первое вхождение подстроки с...

Как можно найти вхождение подстроки в строку без строковых функций?
Как можно найти вхождение подстроки в строку без строковых функций?

Ближайшее вхождение подстроки
Здравствуйте, есть текст и переменная с позицией последнего клика на этом тексте, нужно найти 2...

Удалить из строки каждое вхождение подстроки
Удалить из строки s каждое вхождение подстроки s1. На С++ Дублирование тем запрещено правилами...

Найти первое вхождение подстроки и передать указатель
Есть cимвoльная cтрока и подcтpока. Нужно найти пepвоe вхождение подстроки в строку и передать...

Удалить из строки первое вхождение заданной подстроки
Найти ошибки в коде с++ удалить из строки первое вхождение буквосочетание 'while' #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru