我需要编写一个函数,例如将"string"
替换为"s't'r'i'n'g"
。
我将字符串添加到数组中,...接下来是什么?
我的代码:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
string x;
cout << "Type a string: ";
cin >> x;
char array[x.length()];
for (int i = 0; i < sizeof(array); i++) {
array[i] = x[i];
cout << array[i];
}
}
答案 0 :(得分:2)
我将字符串添加到数组
这是您的第一个错误。在C ++中,您不使用数组作为字符串,而是使用std::string
。
然后...接下来是什么?
Dunnno?写代码?
#include <string>
#include <iostream>
void interlace(std::string &str, char ch)
{
for (std::size_t pos{ 1 }; pos < str.length(); pos += 2)
str.insert(pos, 1, ch);
}
int main()
{
std::string foo{ "string" };
interlace(foo, '\'');
std::cout << foo << '\n';
}
s't'r'i'n'g
根据Remy Lebeau的建议,interlace()
可以确保它的参数str
在进入for
循环之前保留了足够的内存,以避免在循环内重新分配:>
void interlace(std::string &str, char ch)
{
auto length{ str.length() };
if (length < 2) // nothing to do
return;
str.reserve(2 * length - 1); // We insert a character after every character of str
// but the last one. eg. length == 3 -> 2 * 3 - 1
for (std::size_t pos{ 1 }; pos < str.length(); pos += 2)
str.insert(pos, 1, ch);
}
请注意:<string>
,而不是<string.h>
。如果您真的需要C语言的字符串函数(std::strlen()
,std::strcpy()
,...),它们就在C ++中的<cstring>
中。
更好地放弃using namespace std;
的习惯,因为它将std
中的所有标识符插入到全局名称空间中,这很容易导致标识符冲突。对于很小的程序,这可能没问题,但是...
那个:
char array[x.length()];
不是合法的C ++。数组大小必须是编译时常量。您在这里使用的是gcc
语言扩展。你不应该这些东西称为VLA(可变长度数组),它是C的功能。当您需要某些行为类似于数组但具有动态大小的东西时,请使用std::vector<>
。