Как вы отображаете содержимое строки, используя позицию подстроки в качестве отправной точки? - PullRequest
1 голос
/ 28 апреля 2011

Возможно ли вывести строку из позиции, полученной с помощью string.find, до конца строки.

Ответы [ 5 ]

3 голосов
/ 28 апреля 2011

Конечно.string::find возвращает индекс, а string::substr принимает индекс для начальной позиции (и конечной позиции, но в этом случае вы можете использовать значение по умолчанию), чтобы вы могли сделать что-то вроде этого:

std::cout << mystring.substr(mystring.find("Whatever"));
3 голосов
/ 28 апреля 2011
std::cout << yourStr.substr(yourStr.find("position"));

Проверьте справочник методов substr .

2 голосов
/ 28 апреля 2011

string.find возвращает size_t для индекса в строке, где он находит то, что вы искали.Если это не npos, вы можете подставить его:

size_t pos = str.find("whatever");
if (pos != std::string::npos) {
  std::cout << str.substr(pos);
}
2 голосов
/ 28 апреля 2011

Это, конечно, возможно, и во многих отношениях, чем один. string.find() возвращает позицию, поэтому

#include <iostream>
#include <string>
int main()
{
    std::string str = "This is a test";
    std::string::size_type pos = str.find("test");
    if(pos != std::string::npos)
        std::cout << str.substr(pos) << '\n';
}

или с итераторами, если вы боитесь, substr() создаст ненужный временный

#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>
int main()
{
    std::string str = "This is a test";
    std::string::size_type pos = str.find("test");
    if(pos != std::string::npos)
        copy(str.begin() + pos, str.end(),
             std::ostream_iterator<char>(std::cout, ""));
}
1 голос
/ 28 апреля 2011
#include <iostream>
#include <string>
using namespace std;

int main() {
    const string s("So close no matter how far");
    const string::size_type pos = s.find("no");
    if (pos != string::npos) {
        cout << &s[pos] << endl;
    }
}
...