как получить подстроку до первого символа новой строки из строки в c ?

#c

#c

Вопрос:

У меня есть строка с большим содержимым. Я должен отделить содержимое строки до первого символа новой строки и после символа новой строки. содержимое строки выглядит следующим образом:

 std::string = "exption is theo  from my fimnct!
               mt nsamre id kjsdf dskfk djfhj
               /vonsfs/sdvfs/sdvjisd/dd.so
               dfjg dfk dflkkm sdfk " 
  

сверху я должен получить содержимое первой строки до символа новой строки в другой строке и сохранить остальное содержимое неизменным. Символы в первой строке не являются фиксированными. это переменная sting .

Комментарии:

1. В приведенной выше строке нет символа новой строки. Это было бы так: n . Просто говорю.

2. на самом деле, это не будет компилироваться

3. Я согласен. Предварительные условия вашего вопроса просто неверны.

Ответ №1:

А как насчет string::substr и string::find :

 #include <iostream>

int main()
{
    std::string s = "foonbar";
    std::cout << "first line: " << s.substr(0, s.find('n')) << "n";
}
  

Ответ №2:

Вы могли бы сделать это следующим образом:

 std::string first, second, all = "...";
size_t pos = all.find('n')
if(pos != std::string::npos)
{
    first = all.substr(0, pos);
    second = all.substr(pos 1);
}
  

Ответ №3:

Попробуйте std::алгоритмы:

 int main (void)
{
    std::string input(
        "exption is theo  from my fimnct!n"
        "mt nsamre id kjsdf dskfk djfhjn"
        "/vonsfs/sdvfs/sdvjisd/dd.son"
        "dfjg dfk dflkkm sdfk"
    );

    std::string first_line(input.begin(), std::find(input.begin(), input.end(), 'n'));
    std::string rest_lines(std::find(input.begin(), input.end(), 'n'), input.end());

    std::cout << first_line << std::endl;
    std::cout << "---" << std::endl;
    std::cout << rest_lines << std::endl;

    return 0;
}
  

Это выводит

 exption is theo  from my fimnct!
---

mt nsamre id kjsdf dskfk djfhj
/vonsfs/sdvfs/sdvjisd/dd.so
dfjg dfk dflkkm sdf
  

Комментарии:

1. std::string имеет собственные функции find и find_ *`, здесь нет необходимости использовать алгоритмы STL.

2. std::string::find возвращает, size_t пока std::find возвращает итератор

Ответ №4:

Комментарии:

1. без мотивирующего примера мне трудно обосновать find_first_of более find

2. Я не вижу никаких различий между find и find_first_of для этого случая (мы говорим об одном символе). Это было только первое, что пришло мне в голову.