やる気維持のためのブログ

大学の課題、自主勉など...。

paiza備忘録

文字列から数値をトリミングする関数

機能

入力値として与えられた空白区切りの任意の長さの文字列に対して、それぞれの数値を切り出して配列に格納する。
ex)「12 23 25 68 2 34」という文字列が渡されたら12、23、25、68、2、34という数値を配列に格納する。

プログラムの概要

プログラム中のコメント参照
※今回は数値が2桁までで設計しているが、3桁以上も対応させる場合にはtemp配列の大きさを大きくすればいい。 また、今回はtrimedに値を格納しているが、番兵の意味で最後に-1を代入させている。

プログラム

//空白区切りの入力から数値データを切り出す関数ver2
void trim( char *str, int *trimed, int len){
    int i,j,k;
    char temp[3]; /* 2桁までの対応をするため。1つ多いのはnull文字用 */
    j = k = 0;
    //文字列の長さ分ループを回す
    for(i=0;i<len;i++){
        //空白が来た場合の処理
        if(str[i] == ' '){
            //積んである文字の後ろのゴミを切り離すため文字列終端文字nullを代入しておく
            temp[j] = '\0';
            //tempは数字文字nullの構成になっており、これを数値化する
            trimed[k++] = atoi(temp);
            //文字列を空にしておく
            temp[0] = temp[1] = '\0';
            //indexを先頭に戻す
            j = 0;

        //空白が来るまでは数値を文字としてtempに積んでいく    
        }else if(str[i] != ' '){
            temp[j++] = str[i];            
        }        
    }
    trimed[k++] = atoi(temp);
    trimed[k] = -1;
}

kazuki0724i