从字符串中获取单个字符串字符
Get single string char from a string
for each (std::string s in m_intro.text) // std::vector<string>
{
for (int i = 0; i < s.length(); i++)
{
char* chr = &s.at(i);
chr[i+1] = NULL;
std::string t(chr);
// other code is used below not shown as not relivent
}
}
我想从字符串中获取字符。我得到的每个字符我都想变成一个字符串(有一个函数需要const std::string&
(
上面的代码工作一次,但在第一次循环之后,整个s
都是空的。我明白为什么会发生这种情况。
我想要的是在每个循环中获取s
的下一个字符并将其存储为字符串。
char* chr = &s.at(i);
chr[i+1] = NULL;
std::string t(chr);
当char
是 C 字符串(或 char
数组(的一部分时,您使用了正确的(如果过时(方法将下一个元素设置为 NULL
以终止字符串。
然而,在这种情况下,这无关紧要;你只是索引到一个std::string
中,用NULL
替换它的所有字符,这当然不是你的意思。
std::string
有一个构造函数,您可以使用它来避免这种讨厌:
std::string t(1, s.at(i));
// ^ ^ ^
// | | |
// string | |
// | |
// of length 1 |
// char |
// |
// each having value s.at(i)
无需弄乱指针或char
数组或NULL
终止。
通过在循环中将' '
字符串分配给其元素来自己清除字符串。不应使用字符串的内部结构。相反,创建一个临时的单字符字符串,并在循环中重新分配其第一个字符,如下所示:
for each (std::string s in m_intro.text) // std::vector<string>
{
string tmp("_");
for (int i = 0; i < s.length(); i++)
{
tmp[0] = s[i];
// other code is used below not shown as not relivent
}
}
这是
为了做作业吗?为什么你认为"在第一次循环之后,整个s
都是空的"?我看代码似乎很清楚,它表明您缺乏对字符串在 C/C++ 中如何工作的理解......
话虽如此,这里有一种可能的方法来实现您正在寻找的目标:
for each (std::string s in m_intro.text) // std::vector<string>
{
for (int i = 0; i < s.length(); i++)
{
std::string t = s.substring(i, 1);
// other code is used below not shown as not relevant
}
}
char* chr = &s.at(i);
这是一个错误。编辑源字符串,使第二个元素 \0(以零结尾(截断它。试试这个代码:
for (int i = 0; i < s.length(); i++)
{
char chrstr[2];
chrstr[0] = s.at(i);
chrstr[1] = NULL;
std::string t(chrstr);
// other code is used below not shown as not relivent
}
相关文章:
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 尝试将字符串/字符转换为整数会产生意外结果
- 为什么没有访问所有字符串字符?
- 将子字符串字符从字符串值转换为 int,然后将其分配给 int 变量
- 如何将字符串字符与结构数组进行比较?
- 将单个字符串/字符输入串行监视器
- 读取字符串字符时出错 - 对于数组中的字符串值
- C++ C 样式字符串/字符数组的大小 - 优化
- 读取字符串字符时出错
- C++ 使用 Strtok 读取字符串字符时出错
- 如何将 int 数组的 1 个元素转换为字符串/字符
- 在另一个字符串中逐个复制字符串字符
- 将字符串字符映射到矢量
- MBED RTOS将Float转换为字符串/字符阵列
- 如何使用字符串字符数组中的 ++ 运算符访问下一个字符串
- 如何比较C++中的单个字符串字符?
- 内部字符串/字符如何在 int 和 float 中存储
- 将十六进制转换为可打印的字符串/字符
- wcscpy_s后读取字符串字符时出错
- 检查字符串字符和长度