在c++函数中使用字符串数组
using a string array in a function C++
这个问题应该是简单直接的,但是在网上搜索后,我找不到答案。可能是因为这个问题太简单了。
下面的代码来自cplusplus.com。它是一个使字符串小写的函数。我也打算做类似的事情。
/* tolower example */
#include <stdio.h>
#include <ctype.h>
int main ()
{
int i=0;
char str[]="Test String.n";
char c;
while (str[i])
{
c=str[i];
putchar (tolower(c));
i++;
}
return 0;
}
我写的是:
void search(string A[], string B[], int k)
{
int temp;
for(int j = 0; j <= 4; j++)
{
for(int i = 0; i <= k; i++)
{
string str (A[i]);
int h = 0;
char lstr[] = B[j];
char c;
while (lstr[h])
{
c = lstr[h];
putchar (tolower(c));
h++;
}
string key (B[j]);
.....
这部分代码在for循环中。B[j]是一个字符串数组。
Visual Studio通知我char lstr[] = B[j];部分不正确,错误消息为:
错误:初始化使用'{…
我认为问题是,我没有使用正确的语法,在一个函数中使用字符串数组。B[j]应该做一些事情,以使其成为一个字符数组。我想不明白。
是关于指针的吗?对不起,我还没有学过指针。
你明白我的问题了吗?任何帮助都非常感谢!!
如果你想让字符串中的字母小写,那么使用std::transform
来处理字符串会更容易读懂。例如,
// make sure to #include <algorithm>
// at the top
string lstr = B[j];
std::transform(lstr.begin(), lstr.end(), lstr.begin(), ::tolower);
这比直接使用char *
更自然,更符合c++的习惯,也更不容易出错。
您正在尝试将char
分配给char[]
。你可以用下面的代码得到你想要的效果:
....
int h = 0;
char* lstr = &B[j]; // point lstr to the address of j'th element of B.
char c;
while (lstr[h])
{
c = lstr[h];
putchar (tolower(c));
h++;
}
.....
这样做的结果是,lstr
现在是指向B
中的第j个字符的指针。数组本质上是指针。当您执行B[j]
时,它相当于编写char ch = *(B + j);
,其中B指向字符数组(也称为字符串)中第一个字符的地址。
编辑编辑后,现在似乎您正试图将std::string
分配给char
。这是正确的解决方案。
....
int h = 0;
string& lstr = B[j]; // grab a reference to the j'th string in B.
char c;
while (lstr[h])
{
c = lstr[h];
putchar (tolower(c));
h++;
}
.....
在这里,lstr本质上是对B中的第j个字符串的引用,你可以像使用string str(A[i]);
一样使用它作为常规字符串,它会复制A
中的第i个字符串。
您混淆了字符数组和字符串对象。字符数组是一个集合大小的字节数组,它以空结束,而字符串是一个对象,它根据需要扩展/收缩,不需要null结束符。您正在尝试将字符串对象分配给不支持的字符数组。如果您正在使用字符串对象,并且想要检索它们的等效字符数组,请使用c_str()函数:
const char* lstr = B[j].c_str()
此外,使用数组名称B
和索引j
是滑稽的。
- 将C#字符串数组传递给C++
- 如何为 C 型字符串数组编写 getter 和 setter?
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 尝试将 c 字符串数组与分隔符连接起来
- 将字符串数组传递给接受常量字符**的函数
- 返回 C++ 中的字符串数组
- 如何从COM模块中的函数返回字符串数组?
- 无法将字符串数组声明为类成员而不是字符 (C++)
- 删除字符串数组
- 如何将字符串数组返回到 java JNI
- 将字符串数组作为函数参数传递
- C++将字符串数组的元素存储到变量中
- 循环访问还包含未使用元素的字符串数组
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 乘以字符串/数组和全局数组
- 递归二进制搜索与字符串数组
- 如何初始化一个标准::字符串数组?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- C++字符串数组的动态向量
- 给定一个等长字符串数组