C++将类型字符串变量中的单词转换为小写
C++ convert word in type string variable to lowercase
为了简单起见,我选择使用类型"string"而不是"char"。但是我应该将从输入文件中读取的字符串小写。当时我不知道我将不能使用"tolower()"。然而,我确实找到了使用"transform"的方法。但我无法让它发挥作用,也找不到将它与一系列灰泥一起使用的例子。请帮忙。如果可能的话,我还必须将每个州的第一个字母大写,所以如果你能指出正确的方向,我将不胜感激。
#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;
问题是在行
transform( ...., 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;
}
然而,正如其他人所指出的,这不能处理多字节(例如UTF-8)字符
相关文章:
- 将数字转换为单词
- 使用if-else将数字转换为单词
- 将字节数组 (uint8_t) 转换为单词数组 (uint16_t),反之亦然
- C++入门第5版:单词转换程序
- C++:如果用户输入数字将其转换为单词,并且如果按回车键程序应退出,则使用开关大小写
- QT 创建器只会将第一个单词从文本编辑转换为纯文本
- 如何将 c 字符串转换为指针数组,其中每个指针都是 char 数组中的一个单词
- 是否可以使用 SAPI 忽略Microsoft文本到语音转换中的单词
- 读取数字并转换为单词
- 编写代码将给定的数字转换为单词(例如1234作为输入应输出一千二百三十四)
- C++将包含单词和数字的字符串转换为数字
- 将 3 位数字转换为单词C++
- 切换语句将单词转换为数字?C++
- C++ 将存储为 char* 的 4 个字符的单词转换为 int,反之亦然
- 如何将特定数量的字符转换为大写或小写,并计算单词有多少个大写和小写字母
- 可以通过将defed类型转换为某个单词类型来实现“autoconst*const”
- C++我如何在文件中阅读,将每个单词转换为小写,然后对每个单词进行cout处理
- 将单词的输入文件转换为向量-C++
- 如何将 int 变量转换为 ASCII 单词
- 将单词转换为字母的字母顺序值