【发布时间】:2014-04-26 16:15:48
【问题描述】:
为了简单起见,我选择使用类型“字符串”而不是“字符”。但我应该将我从输入文件中读取的字符串小写。我当时不知道我不能使用'tolower()'。但是我确实找到了一种使用“转换”的方法。但我无法让它工作,也找不到将它与一系列结构一起使用的示例。请帮忙。如果可能的话,我还必须将每个州的第一个字母大写,因此如果您能指出正确的方向,将不胜感激。
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <algorithm>
struct ATdata
{
string state;
double miles;
int shelters;
};
int readData( ifstream& input, struct ATdata data[] );
size_t readData( ifstream& input, struct ATdata data[], size_t MAX_ENTRIES );
int main()
{
ifstream input;
char filename[256];
ATdata data[14];
int i;
cout << "Enter input file name: ";
cin >> filename;
input.open( filename );
if ( input.fail() )
{
cout << "Input file does not exist." << endl;
exit(1);
}
size_t linesRead = readData( input, data, sizeof ATdata data[], size_t MAX_ENTRIES );
input.close();
return(0);
}
size_t readData( ifstream& input, struct ATdata data[], size_t MAX_ENTRIES )
{
size_t i;
int j;
while ( i < MAX_ENTRIES && !input.eof() )
{
ATdata entry;
getline( input, entry.state );
transform( entry.state.begin(), entry.state.end(), entry.state.begin(), tolower() );
string nextLine;
if ( !getline( input, nextLine ) )
{
break;
}
istringstream iss( nextLine );
if ( !(iss >> entry.miles >> entry.shelters ) )
{
continue;
}
data[i++] = entry;
}
for ( j = 0; j < 14; j++ )
{
cout << data[j].state << data[j].miles << data[j].shelters << endl;
}
}
return i;
【问题讨论】:
-
那么
tolower()到底有什么问题? -
尝试在
tolower之后删除()- 你想传递函数,而不是调用它。 -
无论我使用 'transform' 还是 'tolower()' 我都会得到 'error: cannot convert 'std::string' to 'int' for argument '1' to 'int tolower(int)' .我不明白,因为“entry.state”变量是一个字符串
-
删除 'tolower' 之后的 '()' 给出 'no matching function for call to transform' 和一堆额外的行
-
丹尼尔给你举了一个例子
标签: c++ string data-structures