From 9f09a15a7b9ee4f9eadab9d184cc97992d25baf0 Mon Sep 17 00:00:00 2001 From: DAyama Date: Wed, 17 May 2017 17:24:53 +0900 Subject: [PATCH] add answerbook to statement --- string/c-correct/main.c | 6 ++-- string/statement.md | 78 ++++++++++++++++++++++++++++++++++------- 2 files changed, 68 insertions(+), 16 deletions(-) diff --git a/string/c-correct/main.c b/string/c-correct/main.c index e739f24..400cae1 100644 --- a/string/c-correct/main.c +++ b/string/c-correct/main.c @@ -5,9 +5,9 @@ char buf[200]; int main(int argc, char const *argv[]) { - int T; - scanf("%d", &T); - while(T--){ + int t; + scanf("%d", &t); + for(int i = 0;i < t;i++){ int n, k; scanf("%s %d", buf, &k); n = strlen(buf); diff --git a/string/statement.md b/string/statement.md index bb97d51..0a32f62 100644 --- a/string/statement.md +++ b/string/statement.md @@ -59,23 +59,25 @@ i ## C ``` -#include -#include +#include <stdio.h> +#include <string.h> char buf[200]; int main(int argc, char const *argv[]) { - int T; - scanf("%d", &T); - while(T--){ - int n, k; - scanf("%s %d", buf, &k); - n = strlen(buf); - if(k > n)printf("*\n"); - else printf("%c\n", buf[k-1]); - } - return 0; + int t; + scanf("%d", &t); + for(int i = 0; i < t ; i++){ + int len, k; + scanf("%s %d", buf, &k); + + len = strlen(buf); + + if(k<=len) printf("%c\n", buf[]); // EDIT HERE + else printf("*\n"); + } + return 0; } ``` @@ -138,4 +140,54 @@ int main() { # Answer Book -そもそもの文字列の取り扱いについて簡単にここに説明を記述したい. +### 文字列の取り扱いについて +文字列は、使用する言語ごとに取り扱い方に注意する必要がある。 +以下では、CとJavaにおいて特に注意すべき点を挙げておく。 + +#### C +* Cには"文字列"という概念を表すデータ構造はなく、"文字の配列(char[])"として取り扱わなければならない。 + * 各文字を取り出すには配列と同じように記述すればよい。 +* Cの文字列は、最後に"\0"という文字が入るため、配列のサイズは実際の文字数より1つ多く取らなければならない。 +* Cで文字列の長さを取得するには **strlen関数** を用いる。 +* Cで文字列の比較をするには **strcmp関数** を用いる。 + * string.hをincludeする必要がある + +``` +#include <string.h> /* strlen関数、strcmp関数を利用するために必要なヘッダファイル */ + +char[] str = "str"; +str = {'s', 't', 'r', '\0'}; +/* 上下どちらも同じ処理 */ + +char c = str[1]; /* cには't'が入る */ + +int len = strlen(str); // 長さを取得 + +if (strcmp(str1, str2) == 0) { + /* str1とstr2が等しい場合の処理 */ +} else { + /* str1とstr2が等しくない場合の処理 */ +} + +``` + +#### Java +* Javaでは、文字列はStringクラスのインスタンス(≒String型の変数)として表される。 + * "String"のSは __大文字__ である。 +* Javaの文字列から各文字を1文字だけ取り出すには **charAtメソッド** を用いる。 +* Javaで文字列の長さを取得するには **lengthメソッド** を用いる。 +* Javaで文字列同士が等しいかどうかを判定するには **equalsメソッド** を用いる。 + +``` +String str = "str"; +char c = str.charAt(1); // cには't'が入る + +int len = str.length(); // 長さを取得 + +if (str1.equals(str2)) { + // str1とstr2が等しい場合の処理 +} else { + // str1とstr2が等しくない場合の処理 +} + +```