Как найти вхождения и расположение символов в аргументах командной строки - PullRequest
0 голосов
/ 21 марта 2019

Я новичок в аргументах командной строки, но мне нужно найти вхождения и местоположения строки из нескольких слов.Допустим, я ввел:

good dog

Я бы ввел o в командной строке, чтобы получить три числа o и местоположений.Тем не менее, у меня есть:

Frequency of d = 0
Location of d = -13280

Как мне найти местоположения и как я могу проанализировать параметры?

#include <stdio.h>

int main(int argc, char **argv)
{
    int i, frequency;
    int *p;
    p=&argc;

    for(int i=0; i<argc; i++)
    {
        if(argv[i]==argv[i])
        {
            frequency++;
        }
    }

    printf("\nFrequency of %c = %d\n", argv[2][0], frequency);
    printf("\nLocation of %c = %d\n", argv[2][0], p);
}

1 Ответ

0 голосов
/ 21 марта 2019

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

Лучше использоватьчто-то вроде scanf с предшествующим ему printf для запроса ввода как для разбираемых строк, так и для символа, который нужно искать.Затем это приводит в исполнение порядок, поэтому гораздо сложнее все испортить.

Теперь, если вы не хотите этого делать, вам все равно придется исправить то, как вы используете argv.argv [0] содержит имя программы, а не первый параметр командной строки.Статическая ссылка на argv [2] даже не гарантирует ничего полезного: она может быть частью строки, которую вы хотите проанализировать, или это может быть искомый символ.

Во-вторыхЕсли вы передадите параметры командной строки в программу, они будут автоматически разделены пробелами.То есть good dog превратится в два отдельных индекса argv: good будет argv [1], а dog будет argv [2] в этом случае.Если вы хотите отправить их в качестве одного аргумента, вы можете набрать "good dog" для достижения этого.

Вот полностью компилируемая программа, которая представляет собой скорее набросок того, что вы, вероятно, хотите:

#include <stdio.h>

int main(int argc, char *argv[]) {
    int i = 0, frequency = 0; // wasn't initialized
    char DesiredChar = 'o';
    int  FirstLocationOfDesiredChar = -1;
    if (argc >= 1) {
        for (i = 1; i < argc; i++) {
            int j = 0;
            int StringLength = strlen(argv[i]);
            for (; j < StringLength; j++) {
                if (argv[i][j] == DesiredChar) {
                    frequency++;
                    if (FirstLocationOfDesiredChar == -1) {
                        FirstLocationOfDesiredChar = j;
                    }
                }
            }
        }
    } else {
        printf("Invalid no of inputs\n");
        return 1;
    }
    printf("%s", argv[1]);
    printf("%d, %d", frequency, FirstLocationOfDesiredChar);
    return 0;
}
...