#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: В смысле более широкой терминологии, это троичный оператор, называемый «условным оператором».