无法从字符串类中读取字符串
Cannot read in string from string class
只是一个简短的问题,我将上路。 为什么当我尝试使用字符串类读取字符串时出现错误? 我收到的错误是:"没有运算符">>"匹配这些操作数/操作数类型是 std::istream>> std::string *">
我开始使用类而不是cStrings。 不幸的是,当我尝试使用 cin 读取字符串时,我不断收到错误。 例如:
void ProcessEditMenuItems( int menu_choice, std::string fname[], std::string lname[],
std::string phone[], std::string bday[] /*char fname[][NAME_LENGTH], char lname[][NAME_LENGTH], char phone[][NAME_LENGTH],
char bday[][NAME_LENGTH]*/ )
{
switch ( menu_choice )
{
case 1:
std::cout << "nEnter new first name: ";
std::cin >> fname;
break;
case 2:
std::cout << "nEnter new last name: ";
std::cin >> lname;
break;
case 3:
std::cout << "nEnter new phone number: ";
std::cin >> phone;
break;
case 4:
std::cout << "nEnter new birthday: ";
std::cin >> bday;
break;
}
}
上面的代码适用于普通的 cStrings,但是当我将函数声明和定义更改为字符串类时,它不起作用。
你的参数fname
、lname
、phone
和bday
被声明为std::string arg[]
,对于参数,参数被转换为std::string* arg
。也就是说,它们是指向std::string
的指针。如果要传递 std::string
的数组,则只会使用 std::string arg[]
声明参数。
如果为每个参数传递一个std::string
,那么您真正想要的是引用类型。例如,fname
应std::string& fname
。引用允许在不复制的情况下将std::string
传递到函数中,以便当您使用 >>
读取它时,您可以修改原始对象。
您实际上是在传递字符串数组,但应该将非常量引用传递给字符串。
将函数原型更改为:
void ProcessEditMenuItems(
int menu_choice,
std::string& fname,
std::string& lname,
std::string& phone,
std::string& bday
)
应该没问题。
从 C 字符串转换为 std::strings
时,您可以使用以下转换表:
Old parameter | New parameter | Description
const char* | const std::string& | Non-modifiable parameter
char* | std::string& | Modifiable string
最好的事情是,在更改字符串大小时,您无需关心字符串大小,而您必须使用char*
。如果需要增加大小,也不必处理删除/重新分配。
fname
是一个std::string
数组。 数组的使用是你之前使用 C 字符串的宿醉吗 - char fname[]
? 如果是这样,您可以改为传递std::string&
void ProcessEditMenuItems(int menu_choice,
std::string& fname,
std::string& lname,
std::string& phone,
std::string& bday)
类似于int arr[2]; arr = 1;
fname 是一个包含字符串对象的数组。"std::cin>>"表示从标准输入中提取字符串。我们只能将字符串对象分配给 fname[0], fname[1] ....
尝试std::cin >> fname[0]
;
- 如何使用Luacneneneba API正确读取字符串和表参数
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 如何从字符串C++读取多个整数
- 使用字符串读取的字符串
- 从文件到字符串读取并传递到功能
- C++ cin 将字符串读取到 int 类型中返回 0
- 使用CIN和/或字符串读取带有混合输入的文本文件
- 将两个字符串作为一个字符串读取
- 如何将WCP 1252字符串读取为std::tstring
- 如何将字符串读取为字符串向量或将整数读取为整数向量
- 将一系列字符串读取到char数组中
- 如何在 c++ 中将文件中的段落作为单个字符串读取
- 从 txt 文件中将后缀表达式作为字符串读取
- C++银行项目;如何将一组字符串读取为单独的浮点数并添加它们
- 在 c++ 中循环字符串读取器
- 将字符串读取为命令行参数C++
- 如何在QT中使用QDomDocument对象将字符串读取为XML
- 使用Matio库将.mat文件中的字符串读取到C++中
- 作为字符串读取第一列数据文件
- 如何在字符串读取完成时停止c++的recv() ?