Как считать одинарные или двойные кавычки

Моя проблема заключается в том, чтобы иметь возможность подсчитать количество одинарных или двойных кавычек в строке в c. пример

        String            Single Quote Count        Double Quote Count
     'hello world'                2                      0
     'hell'o world'               3                      0

     "hello world"                0                      2
     "hello" world"               0                      3

пользователь вводит строку, я беру функцию get (), а затем мне нужен этот счетчик для дальнейшего анализа строки.

Например, было легче, когда мне приходилось считать "|" в моей строке

        String            | Count        
     hello | world           1            
     hello | wo|rld          2            

поэтому моя функция была такой же простой, как:

 int getNumPipe(char* cmd){
  int  num = 0;
  int i;
     for(i=0;i<strlen(cmd);i++){
       if(cmd[i]=='|'){ //if(condition)
       num++;
      }
     }

 return num;
}

Но теперь, когда мне нужно проанализировать кавычки, я не знаю, что поставить для условия if(условие)

          if(cmd[i]==''')??

5 ответов

Решение

Простой побег последовательности:
В любое время, когда вам нужно выразить любой из этих 11 символов как константу в коде, используйте следующее:

'\\' (backslash)
'\'' (quote)
'\"' (double quote)
'\?' (question mark)
'\a' (alarm)
'\b' (backspace)
'\f' (form feed)
'\n' (new line)
'\r' (carriage return)
'\t' (horizontal tab)
'\v' (vertical tab)

Хорошее время для повторного использования кода:

int getNumPipe(const char* cmd, char match) {
  int  num = 0;
  while (*cmd != '\0') {
    if (*cmd == match) num++;
    cmd++;
    }
  return num;
}

...
char s[100];
fgets(s, sizeof s, stdin);
printf(" \" occurs %d times.\n", getNumPipe(s, '\"'));
printf(" \' occurs %d times.\n", getNumPipe(s, '\''));

Чтобы сделать символ, содержащий одну кавычку, вы должны избежать его. В противном случае это рассматривается как конец символа.

int numSingle = 0, numDouble = 0;
int i;
for (i = 0; cmd[i] != 0; i++) { // Don't call strlen() every time, it's N**2
    if (cmd[i] == '\'') {
        numSingle++;
    } else if (cmd[i] == '"') {
        numDouble++;
    }
}

Вы должны использовать обратную косую черту как escape-символ перед одинарной кавычкой (как \') или двойная кавычка (лайк \"). Таким образом, вы должны использовать следующие утверждения для проверки и подсчета:

    if (cmd[i] == '\'')  numOfSingleQuote++;
    else if (cmd[i] == '\"')  numOfDoubleQuote++; 

Проверьте ссылку для более: Escape-последовательности в C

Вам нужно использовать escape-последовательность.

if(cmd[i]== '\'') {
    //do something
}

Вы также можете использовать значения ascii. 27 для 'и 22 для "в шестнадцатеричном.

Вам нужно избежать этого

if (cmd[i] =='\'')
    cntSingle++;
else if (cmd[i] =='\"')
    cntDouble++;
Другие вопросы по тегам