Как посмотреть, равен ли символ новой строке - PullRequest
4 голосов
/ 14 февраля 2012

У меня есть строка, строка содержит, например, «Привет \ nЭто тест. \ N».

Я хочу разбить всю строку на каждый \ n в строке. Я уже сделал этот код:

vector<string> inData = "Hello\nThis is a test.\n";

for ( int i = 0; i < (int)inData.length(); i++ )
{
    if(inData.at(i) == "\n")
    {
    }
}

Но когда я это делаю, я получаю сообщение об ошибке: (\ n как строка)

binary '==' : no operator found which takes a left-hand operand of type 'char' (or there is no acceptable conversion)

(код выше)

'==' : no conversion from 'const char *' to 'int'

'==' : 'int' differs in levels of indirection from 'const char [2]'

Проблема в том, что я не могу посмотреть, равен ли символ "новой строке". Как я могу это сделать?

Ответы [ 3 ]

15 голосов
/ 14 февраля 2012

"\n" является const char[2].Вместо этого используйте '\n'.

И на самом деле ваш код даже не будет компилироваться.

Вы, вероятно, имели в виду:

string inData = "Hello\nThis is a test.\n";

for ( size_t i = 0; i < inData.length(); i++ )
{
    if(inData.at(i) == '\n')
    {
    }
}

Я удалил vector изваш код, потому что вы явно не хотите его использовать (вы пытались инициализировать vector<string> из const char[], который не будет работать).

Также обратите внимание на использование size_t вместо преобразования inData.length() в int.

4 голосов
/ 14 февраля 2012

Возможно, вы захотите попробовать == '\ n' вместо "\ n".

1 голос
/ 14 февраля 2012

Ваше тестовое выражение также неверно, должно быть

vector<string> inData (1,"Hello\nThis is a test.\n");

for ( int i = 0; i < (int)(inData[0].length()); i++ )
{
    if(inData.at(i) == '\n')
    {
    }
}

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

...