Лекция 05 - Упражнение

Условие на задачата за упражнение

Напишете функция, която получава един стринг във формата schema://host:port/path?queryparms#fragment и намира всички му части (ако знаете как се работи със структура нека функцията връща структура с всички данни). След като сте намерили всички отделни части:

  • можете на намерите всички части на пътя - всяка една част е разделена от /.
  • може да намерите всички отделни query параметри и техните стойност. Те са във формата name=value&name2=value2
  • може да намерите всички “реални” стойности на query параметрите. Символите, които не са букви или цифри се “кодират” - разстоянието е символа +, символът # е %24 и т.н.

Разделете задачата на функции по ваша преценка.

Примери:

https://docs.google.com/spreadsheets/d/1qaNobCIZg1_QVpN74V2R2-hbjfGFXCWuwufjUr7WF4o/edit#gid=546630363

schema = https

host = docs.google.com

port =

path = spreadsheets/d/1qaNobCIZg1_QVpN74V2R2-hbjfGFXCWuwufjUr7WF4o/edit

queryparms =

fragment = gid=546630363

http://google.com/search?q=fifa+2018&anw=asd

queryparms=q=fifa+2018&anw=asd

https://www.google.com/search?q=%24

queryparms=q=%24

Решения на задачите от час

#include <stdio.h>

int main(int argc, char **argv) {

    printf("%s", argv[0]);

    for (int i = 0; i < argc; i++) {
        printf("%s\n", argv[i]);
    }

    return 0;

}
#include <stdio.h>
#include <string.h>

int word_score(char word[]);

int main(int argc, char **argv) {
    int word_scores[argc];

    word_scores[1] = word_score(argv[1]);

    for (int i = 2; i < argc; i++) {
        word_scores[i] = word_score(argv[i]);
    }

    int max = word_scores[1];
    for (int i = 2; i < argc; i++) {
        if (word_scores[i] > max) {
            max = word_scores[i];
        }
    }

    printf("%d\n", max);

    /*v1
    int max = word_score(argv[1]);

    for (int i = 2; i < argc; i++) {
        int score = word_score(argv[i]);

        if (score > max) {
            max = score;
        }
    }

    printf("%d\n", max);
    */
    return 0;
}

int word_score(char word[]) {
    int total_score = 0;


    for (int i = 0; i < strlen(word); i++) {
        if (word[i] >= 'A' && word[i] <= 'Z') {
            word[i] = word[i] + ('a' - 'A');
        }
    }

    for (int i = 0; i < strlen(word); i++) {
        if (word[i] >= 'a' && word[i] <= 'z') {
            int letter_score = word[i] - 'a' + 1;
            total_score += letter_score;
        }
    }

    /*v1
    // word[i] != '\0'
    for (int i = 0; i < strlen(word) ; i++) {
        if (word[i] >= 65 && word[i] <= 90) {
            int letter_score = word[i] - 65 + 1;
            total_score = total_score + letter_score;
        }
        if (word[i] >= 'a' && word[i] <= 'z') {
            int letter_score = word[i] - 'a' + 1;
            total_score += letter_score;
        }
    }
    */

    /*v2
    for (int k = 'a', index = 1; k <= 'z'; k++, index++) {
        if (k == letter) {
            sum = sum + index;
        }
    }
    */

    return total_score;
}