Лекция 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;
}