Сравнить с новой строкой Windows C

#c #compare #newline

#c #Сравнить #новая строка

Вопрос:

У меня есть этот простой код:

 string isNewline(string text)
{   
    string toReturn;
    text == "rn" ? toReturn = "(newline)" : toReturn = text;
    return toReturn;
}
  

эта функция никогда не возвращает строку «(новая строка)», поэтому я предполагаю, что мое сравнение с символом новой строки неверно. Как я могу это исправить?

PS. Функция Windows

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

1. Вам пришлось бы показать, как это вызывалось.

2. Как насчет обрезки перед сравнением? remove(text.begin(), text.end(), ' '); // #include <algorithm>

3. text == "rn" ? toReturn = "(newline)" : toReturn = text; допустимо, но странно. Предпочитайте toReturn = (text == "rn" ? "(newline)" : text); (и вы могли бы также просто return немедленно!)

Ответ №1:

В вашей isNewline функции нет ничего плохого.

Проблема в том, как вы получаете строку для передачи isNewline функции.

Я подозреваю, что вы используете что-то вроде getline(fin,aLine) , чтобы получить строку, подобную приведенной ниже?

 while(getline(fin,aLine)){
   cout<<aLine<<endl; //aLine will never contain newline character because getline never save it
   cout<<isNewline(aLine)<<endl; // so this will never output "(newline)"
}
  

getline не сохраняет символ новой строки в aLine

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

1. Да… Моя проблема была здесь. Этот ответ помог мне понять это. Спасибо!

Ответ №2:

 #include <string>
#include <iostream>
using namespace std;


string isNewline(string text)
{   
    string toReturn;
    text == "rn" ? toReturn = "(newline)" : toReturn = text;
    return toReturn;
}

int main() {
    cout << isNewline( "rn" ) << "n";
    cout << isNewline( "zod" ) << "n";
}
  

С принтами:

 (newline)
zod
  

Обратите внимание, что вы действительно хотите передавать строку как const::string amp;

Ответ №3:

Не очень хорошая идея использовать присваивание внутри условного оператора. Но есть и другой способ сделать то же самое. Посмотрите..

Используйте это:

 string isNewline(string text)
{
    return (text == "rn" ? "(newline)" : text);
}
  

или

 string isNewline(string text)
{
    string toReturn;
    toReturn = text == "rn" ? "(newline)" : text;
    return toReturn
}
  

Я надеюсь помочь вам!

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

1. Эта строка вернет результат троичного оператора, который будет («новая строка») ou text, и оба типа являются строковыми!

2. Итак, в чем разница между этими функциями и опубликованной OP? Все они одинаковы, написаны по-разному.

3. @Jonatas: Да, вы можете . Присваивание является допустимым выражением; рассмотрите if (a = 2) {..} . Однако ваши альтернативные предложения превосходят с точки зрения стиля кода.

4. Это условный оператор. И да, вы можете.

5. @Neil: В смысле более широкой терминологии, это троичный оператор, называемый «условным оператором».