スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-- : -- : -- | スポンサー広告 | page top↑

C/C++にsplit関数はなく、代わりにstrtok関数を使う

文字列を分割するために、多くの言語ではsplit関数(メソッド)(*1)が用意されています。しかし、C言語(C++にも!)にはそれに相当するライブラリ関数がないので、代わりにポインタを操作するstrtok関数を使用します。

この関数自体の説明は多くのサイトでされていますが、意外にも分割した文字列を順にputsするだけのサンプルが多かったので、split関数のように配列に格納するプログラムを作ってみました。

例えば、文字列をスペース" "で区切って、別の配列に格納するためには次のようにします(いろいろと面倒なので、mallocはしていません。関数化するのもこれまた面倒なので、使用の際は最近話題のコピペでお願いします^^;)

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

#define MAX_LEN  100

int main() {
    int i, len;
    char str[] = "This is a test", *words[MAX_LEN], *cp;
    const char *delim = " ";

    cp = str;
    for (len = 0; len < MAX_LEN; len++) {
        if ((words[len] = strtok(cp, delim)) == NULL)
            break;
        cp = NULL;
    }
    for (i=0; i<len; i++) {
        puts(words[i]);
    }

    return 0;
}

出力結果

This
is
a
test
新・C言語入門 シニア編 (C言語実用マスターシリーズ)新・C言語入門 シニア編 (C言語実用マスターシリーズ)
林 晴比古

ソフトバンククリエイティブ 2004-02
売り上げランキング : 62164
おすすめ平均

Amazonで詳しく見る
by G-Tools
続きを読む
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

20 : 53 : 19 | プログラミング-C/C++ | トラックバック(0) | コメント(0) | page top↑

サラスの方法を利用した3×3-行列の行列式の計算(C言語)

「行列式 c 言語 3 3」という検索ワードでこのブログに迷い込んだ方がいらっしゃるようなので、サラスの方法(*1)を利用して3×3-行列Aの行列式det(A)を計算するプログラムをC言語で書いてみました。

続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

23 : 05 : 23 | プログラミング-C/C++ | トラックバック(0) | コメント(0) | page top↑

配列の添え字チェック(安全なJavaと自己責任のC言語)

次のコードをご覧下さい。for文の継続条件をi<a.lengthとすべきところで、i<=a.lengthとしてしまうという、プログラミングを始めたばかりの頃にありがちな?コードです。(*1)


public class Index {
    public static void main(String args[]) {
	int[] a = new int[10];
	for(int i=0; i<=a.length; i++) a[i] = i;
	for(int i=0; i<=a.length; i++) 
	  System.out.println(a[i]);
    }
}

これをコンパイルして実行すると次のようになります。


$ java Index
Exception in thread "main"
 java.lang.ArrayIndexOutOfBoundsException: 10
        at Index.main(Index.java:4)

Javaは実行時に配列の添え字をチェックしているため、1つでもオーバーすると"java.lang.ArrayIndexOutOfBoundsException"が投げられます。

では、C言語ではどうでしょうか?

続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 52 : 36 | プログラミング-C/C++ | トラックバック(0) | コメント(0) | page top↑

「ループはポインタ使った方が速い」とは限らない

C言語で配列の各要素へ順番にアクセスするために、indexを用いてループを回す次のようなコードをしばしば書くと思います。


  int i;
  for(i=0; i < SIZE; i++)
    /* この中でa[i]とアクセスする。*/

しかし、次のようにポインタを用いてループを回すコードを時折目にします。


  int *p;
  for(p=&a[0]; p!=&a[SIZE]; p++) sum = (*p)*(*p);
    /* この中で*pとアクセスする。*/

このコーディングの理由としては「ポインタを使った方が速いから。」「C言語らしくてかっこいいから。」などが主だと思いますが、後者はともかくとして前者の主張は常に正しいとは限りません。

続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 36 : 04 | プログラミング-C/C++ | トラックバック(0) | コメント(2) | page top↑

0-15(10進数)を0-F(16進数)に基数変換する関数dtoh

10進数(decimal number)の0-15を引数に取り、16進数(hexadecimal number)の0-Fを返す関数dtohを考えてみます。言語は何を選んでもよいのですが、わけあってここではC言語で書くことにします。

続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 52 : 31 | プログラミング-C/C++ | トラックバック(0) | コメント(2) | page top↑

C言語におけるスタック領域の使われ方

スタック領域 C言語ではどのようにスタック領域が使われているか、変数のアドレスを出力してそれを直感的に理解できるように図示して考察しました。
続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 40 : 01 | プログラミング-C/C++ | トラックバック(0) | コメント(0) | page top↑

私の持っているプログラミング関係の書籍 ~C/C++編~

私の持っているプログラミング関係の書籍を紹介する記事の第2弾です。
今回はC/C++に関する書籍を紹介します。

やさしいC++ 第3版 [やさしいシリーズ]C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)
続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

23 : 50 : 45 | プログラミング-C/C++ | トラックバック(0) | コメント(0) | page top↑
| ホーム |

プロフィール

Author:TBVector

プロフィール

メールフォーム

記事検索

Google

最近の記事

人気の記事

過去の記事

カテゴリー

タグランキング

リンク

最近のコメント

最近のトラックバック

アクセスカウンタ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。