如何查找和替换char数组中存储的字符串?

时间:2015-04-07 09:34:08

标签: c++ linux shell

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

我发现了一个想法,就像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/

是我的根目录

1 个答案:

答案 0 :(得分:0)

您可以使用字符串变量来使用其replace函数。

您必须添加一个包含:

#include <string>

并使用临时字符串变量:     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));

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]上设置安全性,但这里应该没问题。