c ++存储char *函数的char列表

时间:2018-05-01 18:09:57

标签: c++ arrays string

此代码删除字符串中的重复字母如何将此返回值存储在变量中并对其进行操作?

char *removeDuplicate(char str[], int n)
{
// Used as index in the modified string
int index = 0;

// Traverse through all characters
for (int i=0; i<n; i++) {

 // Check if str[i] is present before it
 int j;
 for (j=0; j<i; j++)
    if (str[i] == str[j])
       break;

 // If not present, then add it to
 // result.
 if (j == i)
    str[index++] = str[i];
}

return str;
}

2 个答案:

答案 0 :(得分:0)

您正在更改输入数组str的内容。你显然在调用函数中有这个变量。你可以简单地使用它。

假设您使用:

char title[] = "mission impossible";
removeDuplicate(title, strlen(title));

您可以在致电title后使用removeDuplicate。它将在调用函数后更新。

答案 1 :(得分:0)

如果对于您的上下文可能会返回std::string,或者在char*上分配指针。我将向您展示std::string

的示例
std::string removeDuplicate(char str[], int n)
{
    // Used as index in the modified string
    int index = 0;

    // Traverse through all characters
    for (int i=0; i<n; i++) {

        // Check if str[i] is present before it
        int j;
        for (j=0; j<i; j++)
            if (str[i] == str[j])
                break;

        // If not present, then add it to
        // result.
        if (j == i)
            str[index++] = str[i];
    }

    return std::string(str, str + index);
}

int main()
{
    char test[] = "tttsetst";

    std::string retStr = removeDuplicate(test, strlen(test)); // value is "tse"
    return 0;
}

返回时,我们使用最后更改的pos初始化std :: string以删除重复的字符std::string(str, str + index);

或者如果你根本不想返回值,你可以在你需要的索引中用'\ 0'标记你的str传递给函数来设置字符串的新结尾,它会在离开函数后保留它的值。因为str []通过指针传递。看代码:

void removeDuplicate(char str[], int n)
{
    // Used as index in the modified string
    int index = 0;

    // Traverse through all characters
    for (int i=0; i<n; i++) {

        // Check if str[i] is present before it
        int j;
        for (j=0; j<i; j++)
            if (str[i] == str[j])
                break;

        // If not present, then add it to
        // result.
        if (j == i)
            str[index++] = str[i];
    }

    //mark end of the string
    str[index] = '\0';
}

//...
char test[] = "tttsetst";
removeDuplicate(test, strlen(test)); // test value is "tse" after leaving function
//...

它也会更便宜,你不需要分配新的变量来存储固定的字符串数据。