2017-01-23 14 views
-1

Я пытаюсь написать функцию, которая выводит строку из 5 символов из строки конкатенированных простых чисел длиной 1000 символов, начиная с точки (n), указанной пользователем. Я, наконец, получил саму программу для компиляции, но я, похоже, сталкиваюсь с ошибками в самой программе, и нам еще не научили инструменты, которые помогли бы мне увидеть, где моя проблема в моем программировании. Я считаю, что проблема заключается в получении и отображении самого среза, а не в конкатенированной строке ... но опять же, возможно, я ошибаюсь. Любые советы будут очень признательны.Слишком короткий фрагмент строки C++

-Встреча компьютерного обжима. Основные

#include<iostream> 
#include<string> 


std::string get_concatenated_primes() 
{ 
     unsigned int base, test, cap=1000, prime=0; 
     std::string plist; 
     for (base=0; base < cap; ++base) 
     { 
      for (test=2; test < base; ++test) 
      { 
        if (base % test == 0) 
          break; 
        else 
        { 
          prime=1; 
        } 
      } 

      if (prime == 1 && plist.length() < 1000) 
      { 
        plist += base; 
      } 
    } 
    return plist; 
} 


std::string get_slice_of_5(const std::string concat_primes, const unsigned int n) 
{ 
     std::string slice; 
     slice = concat_primes.substr (n, 5); 
     return slice; 
} 


int main() 
{ 
    unsigned int n; 

    while(std::cin >> n) 
    { 
     std::string concat_primes = get_concatenated_primes(); 
     std::cout << get_slice_of_5(concat_primes, n) << std::endl; 
    } 
    return 0; 
} 
+1

Добро пожаловать в переполнение стека! Похоже, вам, возможно, потребуется научиться использовать отладчик для выполнения вашего кода. С хорошим отладчиком вы можете выполнить свою программу по очереди и посмотреть, где она отклоняется от ожидаемого. Это важный инструмент, если вы собираетесь заниматься программированием. Дальнейшее чтение: ** [Как отлаживать небольшие программы] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver

+0

Вопросы поиска справки по отладке («why isn» t этот код работает? ») должен включать в себя желаемое поведение ** конкретную проблему или ошибку ** и кратчайший код, необходимый для его воспроизведения – xaxxon

+0

С одной стороны, вы никогда не сбрасываете' prime' обратно на ноль. Вы не проверяете, что 'n' слишком велико. Какие ошибки вы видите? –

ответ

0

Terminate вызывается после метания экземпляра 'станд :: out_of_range' , что(): basic_string :: SubStr: __pos (что 998)> this-> размер() (который является 997)

Я не понял, что вы хотите сделать, но вы должны проверить, что concat_primes имеет больше символов, чем n.