一个天真的解决方案可能会在一次读一个字符,当它的'U'
,'I'
,'N'
或'K'
然后读另一个字,看它是否是该组中的下一个字符。如果是,则增加该组的计数器。所有其他角色都会被丢弃。
编辑:实例功能:
int count_uu = 0;
int count_ii = 0;
int count_nj = 0;
int count_ku = 0;
void check_next_char(int expected, FILE *input, int *counter);
void count(FILE *input)
{
int ch; /* Character we read into */
while ((ch = fgetc(input)) != EOF)
{
switch (ch)
{
case 'U':
check_next_char('U', input, &count_uu);
break;
case 'I':
check_next_char('I', input, &count_ii);
break;
case 'N':
check_next_char('J', input, &count_nj);
break;
case 'K':
check_next_char('U', input, &count_ku);
break;
default:
/* Not a character we're interested in */
break;
}
}
/* This function gets the next character from a file and checks against
an `expected` character. If it is same as the expected character then
increase a counter, else put the character back into the stream buffer */
void check_next_char(int expected, FILE *input, int *counter)
{
int ch = fgetc(input);
if (ch == expected)
(*counter)++;
else
ungetc(ch, input);
}
逐行读取文本文件,并在缓冲区中读取strstr()。用'strtok_r()'你会产生不必要的令牌。 – SparKot
你应该总是考虑角落案例,所以我们不必问。如果你看到UUU或KUU会怎么样? –
我不会,我会读字符char,但过程2乘2,这意味着生病看到你,然后看到另一个U和计数++,然后生病阅读下一个字符等,如果我发现一个空白或任何不同于一个字母,我会放弃它,并且使用strtok_r()之前已阅读的字符 – nhenrique