在C++中创建从前缀到字符位置的新字符串

ds97pgxw  于 2022-11-27  发布在  其他
关注(0)|答案(4)|浏览(114)

我怎样才能找到字符串中字符的位置?例如,如果我输入“abc*ab”,我想创建一个只包含“abc”的新字符串。你能帮我解决这个问题吗?

bvpmtnay

bvpmtnay1#

C++标准字符串提供了一个find方法:

s.find(c)

返回字符c的第一个示例在字符串sstd::string::npos中的位置,以防该字符根本不存在。您也可以传递搜索的起始索引;也就是说

s.find(c, x0)

将返回字符c的第一个索引,但从位置x0开始搜索。

ep6jt1vc

ep6jt1vc2#

std::find将迭代器返回到它找到的第一个元素,该元素与您要查找的元素进行比较(如果没有找到任何元素,则返回第二个参数,在本例中为结束迭代器)。您可以使用迭代器构造std::string

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    std::string s = "abc*ab";
    std::string s2(s.begin(), std::find(s.begin(), s.end(), '*'));
    std::cout << s2;
    return 0;
}
rur96b6h

rur96b6h3#

如果你正在处理std::string类型,那么很容易找到一个字符的位置,通过使用std::find算法是这样的:

#include <string>
#include <algorithm>
#include <iostream>

using namespace std;

int main()
{
    string first_string = "abc*ab";
    string truncated_string = string( first_string.cbegin(), find( first_string.cbegin(), first_string.cend(), '*' ) );

    cout << truncated_string << endl;
}

**注意:**如果在std::string中多次找到您的字符,则find算法将返回出现的位置。

yeotifhr

yeotifhr4#

详细说明现有答案,您可以使用string.find()string.substr()

#include <iostream>
#include <string>

int main() {
    std::string s = "abc*ab";
    size_t index = s.find("*");

    if (index != std::string::npos) {
        std::string prefix = s.substr(0, index);
        std::cout << prefix << "\n"; // => abc
    }
}

相关问题