Цикл создания заглавных символов для элемента вектора <struct> - PullRequest
0 голосов
/ 14 марта 2009

После отладки я думал, что все сделал правильно. Но это был только первый элемент в качестве первого элемента в векторе, который был исправлен.

while ( !inFile->eof() )
{
    getline( *inFile, str1, ',' );      
    sStruct.str1 = str1;
    getline( *inFile, str2, ',' );
    sStruct.str2 = str2;
    getline( *inFile, str3, ',' );
    sStruct.str3 = atof( str3.c_str() );
    getline( *inFile, str4 );
    sStruct.str4 = atof( str4.c_str() );

    myLength = sStruct.str1.length();

    for( ; sIndex < myLength; sIndex++ )
    { 
        if ( 97 <= str4[sIndex] && str4[sIndex] <= 122 )
        {
            str4[sIndex] -= 32;
        }
    }   

    sStruct.str1 = str1;
    vectorData->push_back( sStruct );
}

Реализация этого кода в соответствии с методом, который я выбрал для чтения файла, изменяет только первый член структуры, в данном случае str1, на все заглавные буквы. Все символы остаются неизменными для одного и того же члена структуры, str1.

Что мой цикл не делает?

Ответы [ 2 ]

3 голосов
/ 14 марта 2009

Как уже отмечалось в комментариях, есть несколько вещей, на которые вы должны обратить внимание в своем коде:

  • каково значение sIndex, перед тем как войти в этот цикл while?
  • почему вы работаете с str4 [] в цикле for, но получаете длину и выполняете присваивания на str1?
  • Вы действительно уверены, что только str1 изменяется на верхний регистр? данный код не делает этого ...
  • не выполняйте вычисления в верхнем регистре самостоятельно, а вместо этого используйте метод toupper ()
1 голос
/ 14 марта 2009

Я бы предложил использовать преобразование из алгоритма заголовка для преобразования, это чище:

transform( str4.begin(), str4.end(), str4.begin(), toupper );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...