在函数的输入参数中将 char 数组替换为 std::string
Substitute char array with std::string in an input parameter to a function
以下是两个遗留例程。我无法更改例行声明。
static bool GetString(char * str); //str is output parameter
static bool IsStringValid(const char * str); //str is input parameter
调用如下
char inputString[1000];
GetString(inputString);
IsStringValid(inputString);
我想使用 std::string 作为输入,而不是使用固定的 char 数组。我无法正确理解语义(字符串::c_str)。
有了IsEmpty
,这应该不是问题:
std::string str = "Some text here";
IsEmpty(str.c_str());
虽然如果你有一个std::string
,那你通常只会打电话给str.empty()
,这是毫无用处的。
不过,另一个功能更难。原因是它的参数不const
,并且std::string
不允许你使用指针修改字符串。
它可以通过编写一个包装函数来解决,该函数接受字符串引用,并有一个用于实际GetString
调用的内部数组,并使用该数组初始化传递的字符串引用。
包装器示例:
// Function which "creates" a string from scratch
void GetString(std::string& str)
{
char tempstr[4096];
GetString(tempstr);
str = tempstr;
}
// Function which modifies an existing string
void ModifyString(std::string& str)
{
const size_t length = str.size() + 1;
char* tempstr = new char[length];
std::copy_n(str.c_str(), tempstr, length);
ModifyString(tempstr);
str = tempstr;
delete[] tempstr;
}
不能对第一个函数使用 c_str
,因为它返回一个const char*
。可以通过引用传递std::string
并分配给它。至于为空,您可以在字符串上调用c_str
,但最好将成员称为empty()
。
我认为您可以使用STL(标准模板库)的字符串容器。
#include <string>
bool isempty ( int x ) {
return ( x == 0 ) ? true : false ;
}
// inside main()
string s ;
cin >> s ; // or getline ( cin , s) ;
bool empty = isEmpty (s.length()) ;
>std::string
有c_str()
可用于IsEmpty
。没有函数可以给你一个非常量指针。由于 std::string 的分配不能保证是连续的,因此您也不能执行类似&s[0]
的操作。您唯一能做的就是像在示例中那样使用临时 char 缓冲区。
std::string s;
char inputString[1000];
std::vector<char> v(1000);
GetString(inputString);
GetString(&v[0]);
s = &v[0];
IsEmpty(s.c_str());
相关文章:
- 按平均值替换数组中的元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- C++ 替换字节数组中项的顺序
- 使用基于数组和范围的 For 循环替换一些基本代码行
- 为什么数组中对象的析构函数在被另一个对象替换时不被调用?
- 替换 2D 数组中的字符
- 如何在给定文本中用字符数组替换符号
- 查找并替换数组的特定元素
- 用分层结构和类替换数组可以吗?
- C++ 在不使用 C 字符串库函数的情况下替换数组中的字符
- 如何检查和替换数组 C++ 中的元素
- 替换数组C++中的文本的函数
- 用可以检查边界 c++ 的东西替换数组的最接近的解决方案
- Z3 c++api替换数组
- 如何在Qt中更改或替换数组字符
- 如何在c++中比较/替换数组中的非ascii字符
- 用结构体替换数组并使用循环
- 在C++中使用指针byreference替换数组元素
- 替换数组中重复的元素
- 当尝试用星号替换数组中的字符串时,为什么会出现错误?