我必须交换作为指针传递到函数中的两个字符字符串:bool swap_strings(char*string1,char*string2),如果两个字符串的长度不相同,则返回false;否则,如果交换成功,则返回true;
我如何才能意识到这一点?为什么这是不正确的:
#include <iostream>
using namespace std;
bool swap_strings(char * string1, char * string2) {
char * s;
char * s2;
char * tmp = nullptr;
for (s = string1; *s != '\0'; ++s);
for (s2 = string2; *s2 != '\0'; ++s2);
if ((s - s2) != 0) {
return false;
}
else {
tmp = *&string1;
string1 = *&string2;
string2 = *&tmp;
cout << tmp << string1 << string2<< endl;
}
return true;
}
int main()
{
bool da = false;
char s1[] = "hallo1";
char s2[] = "ababab";
da = swap_strings(s1, s2);
cout << da << s1 << s2 <<endl;
}
您可以简单地循环传递的字符串,并进行逐个字符的交换。
例如
#include <assert.h>
#include <iostream>
bool swap_strings(char * const s1, char * const s2) {
assert(s1 != nullptr);
assert(s2 != nullptr);
if (strlen(s1) != strlen(s2))
return false;
char * pch1 = s1;
char * pch2 = s2;
char temp;
while (*pch1 != '\0') {
temp = *pch1;
*pch1 = *pch2;
*pch2 = temp;
++pch1;
++pch2;
}
return true;
}
int main() {
using namespace std;
char s1[] = "hallo1";
char s2[] = "world2";
if (swap_strings(s1, s2)) {
cout << s1 << endl;
cout << s2 << endl;
}
}
除非要复制已编写的代码,否则需要使用strlen
获取字符串的长度:
unsigned int s1len = strlen(string1);
unsigned int s2len = strlen(string2);
if (s1len != s2len)
return false;
如果无法使用标准库函数(愚蠢的要求):
unsigned int s1len = 0;
for (char* s = string1; *s != '\0'; s++, s1len++);
将执行相同的操作(必须对两个字符串执行)。
之后,交换很简单:
for (unsigned int i = 0; i < s1len; ++i)
{
std::swap(string1[i], string2[i]);
}
或
for (unsigned int i = 0; i < s1len; ++i)
{
// these 3 lines are identical to what is done in std::swap
char t = string1[i];
string1[i] = string2[i];
string2[i] = t;
}
您还可以(毫无疑问,这违背了赋值的目的)简单地更改指针值:
bool swap_strings(char*& string1, char*& string2)
{
char* t = string1;
string1 = string2; // string1 will now point to string2
string2 = t; // string2 will now point to what use to be string1
return true;
}
我说这违背了作业的目的,因为你没有做任何复制,而且当你这样做时,长度要求是无关紧要的。当您传入数组时(例如,如果您将输入声明为char a[]=“abcd”;
——这是您在main
中完成的),它也将不起作用(例如,不会编译)。
我正在尝试编写一个类模板,在内部它使用一个函数(BFGS优化的实现,由环境提供),接口如下: 其中< code>fn和< code>gr是类型的函数指针 和 分别是。我的< code>C 类模板如下所示: 这样,它可以由任何具有两个指定成员函数的类进行实例化,例如: 这可能吗?或者也许有更好的方法来做到这一点 - 将两个成员函数分别作为函数指针传递?(如果目标函数和相应的梯度很简单,那么编写两个函
我有以下代码: 我正在尝试将char和char指针数组传递给函数,但上面的代码会导致以下错误和警告: 我正在努力理解问题是什么。
当我构建这个应用程序时,我得到错误: 我也试过: 这将错误更改为: 下面是调用这个例程的类和我传递的回调函数的示例:
C++ 指针 C++ 允许您传递指针给函数,只需要简单地声明函数参数为指针类型即可。 下面的实例中,我们传递一个无符号的 long 型指针给函数,并在函数内改变这个值: #include <iostream> #include <ctime> using namespace std; void getSeconds(unsigned long *par); int main () {
我正在尝试将参数传递给作为参数传递的函数指针。 代码: 我得到了这个错误: 类型"void"的参数与类型"void(*)(wchar_t*,wchar_t*)"的参数不兼容 如何解决此问题以完成我想要实现的目标? 编辑:对不起,不清楚。我实际上试图完成的是将函数注入子进程并传递两个参数(wchar_t*、wchar_t*),以便我可以使用它们。但主函数可以是void或int argc、char**
在下面的代码中,当函数print_uart传输字符串“hello world”时,*s中到底收到了什么?是字符H还是存储字符串“hello world”的内存地址?