Как написать программу, которая вводит слово и подсчитывает, сколько раз слово появляется в заданных строках в C? - PullRequest
0 голосов
/ 01 мая 2020

Входное слово

1.Не содержит пробелов.

2.Меньше 15 символов.

Сохраняйте это

1.Case чувствительный

2. НЕ используйте 'string.h'.

3. Разрешен только 'stdio.h'.

#include<stdio.h>
int search(const char* str1, const char* str2)
int main(void)
{
    char input[15];
    char string1[400] = " Pinot noir is a red wine grape variety of the species Vitisvinifera. The name may also refer to wines created predominantly from Pinot noir grapes. The name is derived from the French words for pine and black. The word pine alludes to the grape variety having tightly clustered, pine cone-shaped bunches of fruit.[1].";
    char string2[400] = " Metallica is an American heavy metal band. The band was formed in 1981 in Los Angeles by vocalist/guitarist James Hetfield and drummer Lars Ulrich, and has been based in San Francisco for most of its career.[1][2] The band's fast tempos, instrumentals and aggressive musicianship made them one of the founding big four bands of thrash metal, alongside Megadeth, Anthrax and Slayer.";

    printf("string1: %s\n\n", string1);
    printf("string2: %s\n\n", string2);
    printf("Enter a word to count:");
    scanf("%s", input);
    printf("'%s' is found %d times in the string1.\n", input, search(input, string1));
    printf("'%s' is found %d times in the string2.\n", input, search(input, string2));
    return 0;
}

int mystrlen(const char* str)
{
    int i = 0;
    while (*str != '\0') {
        *(str++);
        i++;
    }
    return i;
}

int search(const char* str1, const char* str2)
{
    int result = 0;
    int len = mystrlen(str1);

    while (*str2 != '\0') {
        if (*str2 == *str1) {
            while (*str1 != '\0') {
                if (*(s1++) != *(s2++))
                    result = result * 1;
            }
            if (*(str2--) != ' ' || *str2 + len != ' ')
                result = result * 1;
            else if (*str2 + len == '.' || *str2 + len == ',')
                result++;
            result++;
        }
        *(str2++);
    }
    return result;
}

ПРИМЕР

string1: "Пино нуар - это сорт красного вина сорта Vitisvinifera. Название может также относиться к винам, созданным преимущественно из винограда сорта Пино Нуар. Название происходит от французских слов" сосна и черный ". . Слово сосна намекает на сорт винограда, имеющий плотные гроздья плодовых сосновых шишек. [1]. ";

string2:" Metallica - американская хэви-металлическая группа. Группа была образована в 1981 году. в Лос-Анджелесе вокалистом / гитаристом Джеймсом Хетфилдом и барабанщиком Ларсом Ульрихом, и большую часть своей карьеры он живет в Сан-Франциско. [1] [2] Быстрые темпы группы, инструментальное звучание и агрессивная музыкальность сделали их одной из основателей большой четверки. полосы из металла sh, рядом с М egadeth, Anthrax and Slayer. ";

Введите слово для подсчета: is

'is' найдено 2 раза в строке 1.

'is' найдено 1 раз в строке 2.

1 Ответ

0 голосов
/ 01 мая 2020

Я не мог понять вашу функцию search, и я подумал, что ваша функция не охватывает некоторые случаи, например, если за словом сразу следует знак вопроса или точка с запятой. Я включил некоторые из этих случаев тоже.

#include <stdio.h>
// Find length of a char string
int mystrlen(const char* str)
{
    int i = 0;
    while (*str != '\0') {
        str++;
        i++;
    }
    return i;
}
// Find count of str1 in str2
int search(const char* str1, const char* str2)
{
    int cnt = 0, 
        i = 0,
        j = 0,
        len = mystrlen(str1);

    for (i = 0; str2[i] != '\0'; i++) {
        if (str1[j] == str2[i]) {
            // if last char of str1 then check next char in str2
            // is followed by either space or . or ? or ! or , or ; or :
            // If yes, then a match is found
            if (j == len - 1 
                && str2[i + 1] != '\0' 
                && (str2[i + 1] == ' ' 
                    || str2[i + 1] == '.' 
                    || str2[i + 1] == '?' 
                    || str2[i + 1] == '!'
                    || str2[i + 1] == ','
                    || str2[i + 1] == ';'
                    || str2[i + 1] == ':'))
                cnt++;
            // if not last char of str2, increment j to check for next char
            else j++;

        }
        // if not matched with current char of str2, reset j
        else j = 0;
    }
    return cnt;
}
int main(void) {
    int cnt = search("island", "That is my island, isn't it?");
    printf("island appeared %d times\n", cnt);
    return 0;
}

Вот ссылка, по которой я его проверял: https://ideone.com/BPbQwh

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...