Сравните с новой строкой Windows C ++ - PullRequest
1 голос
/ 28 мая 2011

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

string isNewline(string text)
{   
    string toReturn;
    text == "\r\n" ? toReturn = "(newline)" : toReturn = text;
    return toReturn;
}

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

PS.Функция Windows

Ответы [ 3 ]

3 голосов
/ 28 мая 2011

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

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

Iподозреваете, что вы используете что-то вроде 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 голос
/ 28 мая 2011
#include <string>
#include <iostream>
using namespace std;


string isNewline(string text)
{   
    string toReturn;
    text == "\r\n" ? toReturn = "(newline)" : toReturn = text;
    return toReturn;
}

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

печать:

(newline)
zod

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

0 голосов
/ 28 мая 2011

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

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

string isNewline(string text)
{
    return (text == "\r\n" ? "(newline)" : text);
}

или

string isNewline(string text)
{
    string toReturn;
    toReturn = text == "\r\n" ? "(newline)" : text;
    return toReturn
}

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

...