gpt4 book ai didi

c++ - 从char数组中删除字符时出现问题

转载 作者:行者123 更新时间:2023-12-01 15:12:22 27 4
gpt4 key购买 nike

我正在编写一个程序,从字符数组中删除字符“&”(如果存在)并显示输出。
这是我的代码:

#include <iostream>
#include <string>
using namespace std;

void decrypt(char mess[1024])
{
int i = 0;
int decmp = 0;
int len = strlen(mess);
char decmess[256] = {0};
while (i < len)
{
if (strcmp(&mess[i], "&") == 0) {
i++;
} else {
decmess[decmp] = mess[i];
i++;
decmp++;
}
}
cout << decmess << endl;
}
int main(int argc, char *argv[])
{
char encmess[1024] = {0};
cout << "Enter message to decrypt" << endl;
cin.getline(encmess, 1024);
decrypt(encmess);
}
但是它只是不能工作,如果存在的话,只能从字符串的最后删除“&”。
样本输入/输出:
input: sg&shx&f
output: sg&sh&f
input: dh&st&
output: dh&st
请帮忙!!!

最佳答案

您将strlen()char[]#include <string>混合使用会使事情过于复杂。您无需初始化n终止decmess即可进行初始化,而无需strcmp()来比较单个字符。
您似乎想执行以下操作:

#define MAXC 1024           /* if you need a constant, #define one (or more) */

void decrypt(char *mess)
{
char decmess[MAXC] = "";
int i = 0, decmp = 0;

for (; mess[i]; i++)
if (mess[i] != '&')
decmess[decmp++] = mess[i];

decmess[decmp] = 0; /* affirmatively nul-terminate despite initialization */

std::cout << decmess << '\n';
}
( 注意: C字符串是nul终止的,在遍历它包含的字符之前不需要获取长度,只需循环直到找到nul字符(ASCII 0)。而且,不带参数的 main()是只是 int main()int main(void))
至于为什么您的操作无效, strcmp(&mess[i], "&")会将 &mess中剩余的内容(从 mess + i开始)进行比较,因此您永远不会单独匹配 '&'&mess[i]只是指向 mess中第ith个字符的指针,使用 strcmp可以从该位置到字符串的结尾与 "&"进行比较。 (您可以使用 strncmp(&mess[i], "&", 1)限制它,但这对于 if (mess[i] == '&')是多余的
添加您的简短 main():
#include <iostream>

#define MAXC 1024 /* if you need a constant, #define one (or more) */

void decrypt(char *mess)
{
char decmess[MAXC] = "";
int i = 0, decmp = 0;

for (; mess[i]; i++)
if (mess[i] != '&')
decmess[decmp++] = mess[i];

decmess[decmp] = 0; /* affirmatively nul-terminate despite initialization */

std::cout << decmess << '\n';
}

int main(void)
{
char encmess[MAXC] = "";

std::cout << "Enter message to decrypt" << '\n';
std::cin.getline(encmess, MAXC);

decrypt(encmess);
}
( 注意:参见: Why is “using namespace std;” considered bad practice?C++: “std::endl” vs “\n”)
示例使用/输出
$ ./bin/decmess
Enter message to decrypt
sg&shx&f
sgshxf
如果您还有其他问题,请告诉我。

关于c++ - 从char数组中删除字符时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63609901/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com