Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 4
Регистрация: 16.02.2013
Сообщений: 123
1

и вновь я к вам - string subscript out of range

26.03.2017, 23:10. Показов 447. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Смысл того, что делаю, в принципе по комментам кода должно быть понятно - частотный анализ текста. На 38 строке выбивает string subscript out of range. Что ему не нравится?

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
// ch.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <locale.h>
#include <Windows.h>
using namespace std;
 
int main(int argc, char *argv[])
{   setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
    SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
    string tabl_vigh = "абвгдежзийклмнопрстуфхцчшщъыьэюя";
    string s; //Строка считанная из файла
    string simvol;//запоминаем символ если нашли
    int dlina;//длина строки из файла
    int raz;
    float chastota;//частота символа
    
    cout<<"Текст из файла mess.txt: ";
          setlocale(LC_ALL,"Russian");//Чтение файла
          ifstream in("mess.txt");
          getline(in,s);
          cout<<s;
          dlina=s.length();
          in.close();
 
     for (int i = 0; i < dlina; i++)//пока не закончится строка файла
     { int raz=0; 
         for (int index =0 ; index<32; index ++)
        {    for (int ind =0 ; ind<32; ind ++)
              {if (tabl_vigh[index]==s[ind])//если символ строки равен символу алфавита\
                 
                    { simvol[index]=tabl_vigh[index];//запоминаем его 
                      raz++;//и сколько раз он появляется в тексте
                     }
                  
         cout<<"\nСимвол ";
         /* for (int index =0 ; index<32; index ++)
          { cout<<simvol[index];}*/
             }
         cout<<"встречается %i раз\n"<<raz<<endl;
 
        }
     chastota=float(100*raz/dlina);
     cout<<"Частота появления символа="<<chastota<<endl; 
   }
    
     system("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2017, 23:10
Ответы с готовыми решениями:

String subscript out of range
#include &lt;SFML/Graphics.hpp&gt; #include &lt;sstream&gt; #include &lt;iostream&gt; using namespace sf; const...

String subscript out of range
Здравствуйте! Выбивает ошибку &quot;string subscript out of range&quot;, хотя все предложение, которое...

String subscript out of range
При запуске выдает ошибку &quot;string subscript out of range&quot;. Подскажите, в чем проблема. #include...

String subscript out of range
Разбираю пример, который дала препод в примерах к лекциям..Пример по коду Виженера.. Пару раз...

4
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
26.03.2017, 23:24 2
Цитата Сообщение от Милашечка Посмотреть сообщение
На 38 строке выбивает string subscript out of range.
Потому что индекс index превышает длину строки simvol, которая изначально является пустой. Это всё равно, что записывать что-то в массив нулевой длины.

Добавлено через 1 минуту
P.S. Непонятно, зачем вообще нужна строка simvol, если она не используется.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.03.2017, 23:46 3
Цитата Сообщение от Милашечка Посмотреть сообщение
Что ему не нравится?
Цитата Сообщение от Милашечка Посмотреть сообщение
simvol[index]=tabl_vigh[index];
simvol - пустая строка.
вы пытается получить доступ по индексу к буковке,
которой в пустой строке не существует.

срабатывает защита.

вместо string simvol;
здесь по смыслу больше подходит карта:

std::map<символ, количество_повторений>
C++
1
2
3
4
5
6
7
8
9
10
11
...
std::map<char, size_t> simvol;
...
 
//получаем символ по таблице
const char ch = tabl_vigh[index]; 
 
// увеличиваем количество повторений
++simvol[ch];
 
...
0
0 / 0 / 4
Регистрация: 16.02.2013
Сообщений: 123
27.03.2017, 10:34  [ТС] 4
Цитата Сообщение от hoggy Посмотреть сообщение
вы пытается получить доступ по индексу к буковке,
вот я хочу чтоб потом , когда буква находилась, все посчиталось - можно было вывести сообщение что например :
Символ "р" встречается 10 раз.

мне нужно чтоб ее запоминало для этого..мне тогда может можно завести переменную типа char, как вы написали
Цитата Сообщение от hoggy Посмотреть сообщение
const char ch = tabl_vigh[index];
, просто обнулять перед входом в цикл?
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.03.2017, 10:38 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <unordered_map>
 
int main()
{
    const std::string str = "Eniki beniki eli vareniki";
    std::unordered_map<char, int> um;
    for (const char ch : str)
        ++um[ch];
    for (const auto &p : um)
        std::cout << p.first << " => " << p.second * 100.0 / str.length() << "%\n";
}
0
27.03.2017, 10:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2017, 10:38
Помогаю со студенческими работами здесь

String subscript out of range
Почитала на форуме, что данная ошибка появляется при выходе за границы массива. Задача - найти...

Ошибка: string subscript out of range
Прошу помощи, сам никак уже больше половины дня не могу разобраться с этим. При запуске после...

Ошибка: string subscript out of range
Задача: Расстоянием Хэмминга двух строк a и b одинаковой длины называется количество позиций, в...

Ошибка string subscript out of range
Нужно заменить символ 'w' на 'v'. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt;...

Expression: string subscript out of range
Люди помогите, уже всю голову сломал, не могу понять где ошибка в функции inf_to_post ...

Ошибка string subscript out of range
Здраствуйте создал библиотеку, при подключение библиотеки и запуска программи все работает...


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

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