gpt4 book ai didi

c++ - 无法正确地逐个字符地从另一个字符串中删除一个字符串

转载 作者:太空狗 更新时间:2023-10-29 20:50:10 26 4
gpt4 key购买 nike

这里的函数 (sub) 将两个字符串作为输入,遍历两个字符串我试图找出 string1 与 string2 中是否有任何匹配项。如果有任何字符串 1 的字符被 NULL 字符替换。现在这适用于非重复字符。但是如果 string1 有多个匹配的字符,一旦它全部被 NULL 字符替换,我只需要一个替换。例如,如果 string1 和 string2 分别为 122 和 2,则消除后我需要 1 2,现在我得到一个 1。

void sub (string str1, string str2){
int i,j,k;
for(i=0; i<=str2.size() ; i++){
for(j=0; j<=str1.size() ; j++ ){
if( str2[i] == str1[j] )
str1[j] = NULL;
}
}
cout<<str1;

如果 str1=122 和 str2=2,预期结果是 1 2 而不是 1

最佳答案

你让事情变得比他们需要的更困难。 string 库提供了两个函数,它们可以在一次调用中完全满足您的需求。

成员函数std::basic_string::find_first_of将在 string1 中找到 string2 中字符的第一次出现,并返回找到该字符的位置。

std::basic_string::erase函数可以删除 string1 中从该位置开始的所有字符。

您的 sub 函数将缩减为:

void sub (std::string& s1, const std::string& s2)
{
s1.erase (s1.find_first_of (s2));
}

使用给定字符串的一个简短示例是:

#include <iostream>
#include <string>

void sub (std::string& s1, const std::string& s2)
{
s1.erase (s1.find_first_of (s2));
}

int main (void) {

std::string s1 ("122"), s2 ("2");

sub (s1, s2);

std::cout << "s1: " << s1 << "\ns2: " << s2 << '\n';
}

示例使用/输出

$ ./bin/sub1at2
s1: 1
s2: 2

检查一下,如果您还有其他问题,请告诉我。

关于c++ - 无法正确地逐个字符地从另一个字符串中删除一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56309291/

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