如何解决从char数组中删除字符时出现问题
我正在编写一个程序,以从char数组中删除字符“&”(如果存在)并显示输出。 这是我的代码:
#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>
混合在一起的情况变得过于复杂。您无需初始化decmess
就不必初始化n,而不必依靠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-character(ASCII 0)。此外,main()
不带任何参数只是int main()
或int main(void)
)
关于您的工作为何无效,strcmp(&mess[i],"&")
将&
与mess
中mess + i
中剩余的内容进行比较,因此您永远不会匹配{{1} }。 '&'
只是指向&mess[i]
中第i th 字符的指针,并使用mess
从该位置到字符串strcmp
的结尾。 (您可以使用"&"
来限制它,但是对于strncmp(&mess[i],"&",1)
添加简短的if (mess[i] == '&')
,您将拥有:
main()
(注意:请参见:Why is “using namespace std;” considered bad practice?和C++: “std::endl” vs “\n”)
使用/输出示例
#include <iostream>
#define MAXC 1024 /* if you need a constant,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);
}
如果您还有其他问题,请告诉我。
,因为您用c++
标记了问题,所以这是执行此操作的c ++方法:
#include <algorithm>
#include <string>
void decrypt(std::string& mess)
{
mess.erase(std::remove_if(mess.begin(),mess.end(),[](auto c) {return c == '&'; }),mess.end());
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。