2013-11-22 2 views
-3

Я столкнулся с проблемой с ошибкой на C++. Вот код:C++: выражение: строковый индекс вне диапазона

ошибки как: Expression: строка индекса вне диапазона

#include "stdafx.h" 
#include <iostream> 
#include <algorithm> 
#include <string> 

void removeAllchars1(std::string s) 
{ 
    int len = strlen(s.c_str()); 
    std::string b; 
    int len2 = strlen(b.c_str()); 
    for(int i = 0; i < len; ++i) 
    { 
    if(isdigit(*(s.c_str()+i))) 
    { 
     b[len2]=s[i]; 
     ++len2; 
    } 
    } 
    std::cout <<"\nAfter removeAllchars1 function is:"<< *(b.c_str()); 
} 
+1

Хм ... вы тоже покажете нам код? Кроме того, сообщения, содержащие «asap» вместо вопроса, как правило, закрываются и закрываются. – Hulk

+0

'b [len2]' всегда обращается к концу строки. Кроме того, просто используйте 's.size()'. – BoBTFish

+0

Привет, Томек. void removeAllchars1 (std :: string s) { \t int len ​​= strlen (s.c_str()); \t std :: string b; \t int len2 = strlen (b.c_str()); \t для (INT I = 0; я <длина; ++ я) \t { \t \t, если (isdigit (* (s.c_str() + I))) \t \t { \t \t \t Ь + = с [I]; \t \t} \t} \t станд :: соиЬ << "Функция \ Nafter removeAllchars1 является:" << * (b.c_str()); } int _tmain (int argc, _TCHAR * argv []) { \t char * str = "hoc_r123"; \t removeAllchars1 (str); \t возвращение 0; } –

ответ

2
b[len2]=s[i]; 

Поскольку len2 длина b (хотя и вычисляется в довольно запутанной манере - то, что случилось с b.length()?), это выходит за пределы диапазона, как говорит ошибка. Если вы хотите добавить символ в строку, сделайте следующее:

b += s[i]; 
+0

Hi Mike Seymour b + = s [i]; // Прямо о синтаксисе C++ on build. но, это не правильно о логике. Презентация: \t char * str = "hoc_r123"; \t removeAllchars1 (str); // Результат 1 –

+0

@NgocPhan: Это потому, что вы печатаете '* (b.c_str())', который является только первым символом. Попробуйте вместо этого напечатать 'b'. В более общем плане, прекратите вызов 'c_str()', за исключением случаев, когда вам действительно нужна C-совместимая строка (которой вам не нужна нигде в этой функции). –

+0

Многие благодарю вас за поддержку. Ты прав. –

Смежные вопросы