use*_*020 2 c++ string data-structures
为简单起见,我选择使用类型“字符串”而不是“字符”。但我应该小写我从输入文件中读入的字符串。我当时不知道我将无法使用“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;
Run Code Online (Sandbox Code Playgroud)
问题是在行中
transform( ...., tolower() );
Run Code Online (Sandbox Code Playgroud)
您正在调用函数 tolower 而不是通过引用转换算法来传递它.. -()在 tolower 中删除括号...
以下是课本实例....
#include <iostream> // std::cout
#include <algorithm> // std::transform
#include <vector> // std::vector
#include <functional> // std::plus
int main () {
std::string myname("my name IS soren");
// To upper
std::transform (myname.begin(), myname.end(), myname.begin(), ::toupper);
std::cout << myname << std::endl;
// To lower
std::transform (myname.begin(), myname.end(), myname.begin(), ::tolower);
std::cout << myname << std::endl;
// Capitalize first
std::transform (myname.begin(), myname.begin()+1, myname.begin(), ::toupper);
std::transform (myname.begin()+1, myname.end(), myname.begin()+1,::tolower);
std::cout << myname << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然而正如其他人指出的那样,这不处理多字节(例如 UTF-8)字符
| 归档时间: |
|
| 查看次数: |
11262 次 |
| 最近记录: |