gpt4 book ai didi

c++ - 如何查找并替换存储在 char 数组中的字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:26 25 4
gpt4 key购买 nike

伙计们,我正在使用c++构建一个shell程序,这是我获取当前用户名和工作地址的代码,但我想编辑地址,如果它包含根目录,则包含部分将替换为“〜”,但我不知道该怎么做..

我发现了一个想法,即向左移动 pw_dir 的几位大小的方法。但是该怎么做呢?

请帮助我。

char hostname[32];
char present_addr[255];
struct passwd *getuser;

void default_output() {

getuser = getpwuid(getuid());
gethostname(hostname, sizeof(hostname));
getcwd(present_addr, sizeof(present_addr));

if (strcmp(present_addr, getuser->pw_dir) == 0) {
cout << "[CYHshell]" << getuser->pw_name << "@" << hostname << ":" << "~$ ";
}
else
cout << "[CYHshell]" << getuser->pw_name << "@" << hostname << ":" << present_addr << "$ ";
}

嗯,例子应该是这样的:

/Users/howechen/Library/Caches/clion10/cmake/generated/374e429/374e429/Debug$

这是我的程序的当前工作目录,它应该固定为

~/Library/Caches/clion10/cmake/generated/374e429/374e429/Debug$ 

原因

/Users/howechen/

是我的根目录

最佳答案

您可以使用字符串变量来使用其 replace功能。

您必须添加一个包含:

#include <string>

并使用临时字符串变量: 字符主机名[32]; 字符present_addr[255]; 结构体passwd *getuser;

void default_output() {

getuser = getpwuid(getuid());
gethostname(hostname, sizeof(hostname));
getcwd(present_addr, sizeof(present_addr));

std::string outputString = present_addr;
outputString.replace(getuser->pw_dir, "~");

但是您必须将数据放回present_addr:

for (unsigned int i=0; i<outputString.length(); i++)
{
present_addr[i] = outputString.c_str()[i];
}
present_addr[i+1] = '\0';

memcpy(present_addr, outputString.c_str(), outputString.length());

我没有在present_addr[i]上设置安全性,但这里应该没问题。

关于c++ - 如何查找并替换存储在 char 数组中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29488356/

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