Как считать одинарные или двойные кавычки
Моя проблема заключается в том, чтобы иметь возможность подсчитать количество одинарных или двойных кавычек в строке в 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++;