循环为向量<struct>元素</struct>创建大写字符

时间:2009-03-14 07:27:04

标签: c++ vector loops

经过调试,我以为我做对了。但它只是第一个成员作为向量中的第一个被纠正的元素。

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 );
}

在我选择读取文件的方法下实现此代码,只将第一个struct成员(在本例中为str1)更改为全部大写字符。对于相同的结构成员str1,所有字符都不受影响。

我的循环没有做什么?

2 个答案:

答案 0 :(得分:3)

正如评论中已经说明的那样,您首先应该在代码中看到一些内容:

  • 在您输入此while循环之前,sIndex的值是多少?
  • 为什么你在for-loop中使用str4 []但得到长度并在str1上进行分配?
  • 你真的确定,只有str1改为大写吗?给定的代码不这样做......
  • 不要自己进行大写计算,而是使用toupper()方法

答案 1 :(得分:1)

我建议使用从头算法转换来转换,它更清晰:

transform( str4.begin(), str4.end(), str4.begin(), toupper );