创建一个从前缀到C 中字符位置的新字符串

Create a new string from prefix up to character position in C++

本文关键字:字符 位置 字符串 前缀 一个 创建      更新时间:2023-10-16

如何找到字符串中字符的位置?前任。如果我输入" ABC*AB",我想创建一个使用" ABC"的新字符串。你能帮我解决我的问题吗?

c 标准字符串提供find方法:

s.find(c)

,如果根本不存在字符,则将字符c的第一个实例位置返回到字符串sstd::string::npos中。您也可以通过搜索的起始索引;即。

s.find(c, x0)

将返回字符c的第一个索引,但从位置启动搜索x0

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;
}

如果您正在使用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算法将返回发生的位置。

详细说明现有答案,您可以使用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
    }
}