c++サンプルメモ

変数の型変換

【Proton.jp】 C++:string型とchar型を相互に変換する
char型, std::string型, NSString型 相互変換例まとめ | SzMake
C++の文字列操作 - minus9d's diary

■引数を2倍して出力する

https://github.com/ludwig125/work/blob/master/src/cpp/test/argv.cpp

#include <iostream>
#include <stdlib.h>
using namespace std;

int main(int argc, char** argv)
{
    for(int i = 1; i < argc; i++){
        cout << "argv "<< i << " : " << argv[i] << endl;
        cout << "double argv: " << atoi(argv[i])*2 << endl;
    }
    return 0;
}
参考

C++で文字列を数値に変換する方法 - C++と色々
http://www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03042.html


実行結果

[~/git/work/src/cpp/test ] $ g++ argv.cpp 
[~/git/work/src/cpp/test ] $ ./a.out 13 83
argv 1 : 13
double argv: 26
argv 2 : 83
double argv: 166
[~/git/work/src/cpp/test ] $ 

■型を確認

#include <iostream>                                                     
#include <stdlib.h>
#include <typeinfo>
using namespace std;

int main(int argc, char** argv)
{
    int a,b;
    for(int i = 1; i < argc; i++){
        cout << "argv "<< i << " : " << argv[i] << endl;
    }

  // 引数の型
    cout << typeid(argv[1]).name() << " : " << argv[1] << endl;

    a = atoi(argv[1]);
    b = atoi(argv[2]);

    // 変換後の型
    cout << typeid(a).name() << " : " << a << endl;

    return 0;
}

実行結果

$ ./a.out 10 30
argv 1 : 10
argv 2 : 30
Pc : 10
i : 10

vectorのソート

参考:
http://blog.sarabande.jp/post/62062199465
http://kaworu.jpn.org/cpp/std::sort

https://github.com/ludwig125/work/blob/master/src/cpp/test/sort_vector.cpp

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
                                                                               
    vector<int> v;
    v.push_back ( 3 );
    v.push_back ( 4 );
    v.push_back ( 1 );
    v.push_back ( 2 );

    std::sort(v.begin(), v.end(), std::greater<int>() );
    for(vector<int>::iterator it = v.begin(); it != v.end(); it++){
        cout << *it << endl;
    }

    return 0;
}

実行結果

[~/git/work/src/cpp/test ] $ ./a.out 
4
3
2
1
[~/git/work/src/cpp/test ] $
■文字列を受け取って1文字ずつvectorに格納
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    string str;
    getline(cin,str);

    string tmp;
    // 'abcde'のような文字列を一文字ずつvectorに格納
    vector<string> v;
    for(int i = 0; i < (int)str.size(); i++){
        char ch = str[i];
        cout << ch << " " << endl;

//        v.push_back(string(ch));
        // 直接charをvectorに格納しようとしたらコンパイルエラーになったのでstringの変数に入れた
        tmp = ch;
        v.push_back(tmp);
    }

    cout << "output vector" << endl;
    for(vector<string>::iterator it = v.begin(); it != v.end(); it++){
        cout << *it << endl;
    }

    return 0;
}
typeidの出力

Uses of typeid in C++ - Codeforces

bool = b
char = c
unsigned char = h
short = s
unsigned short = t
int = i
unsigned int = j
long = l
unsigned long = m
long long = x
unsigned long long = y
float = f
double = d
long double = e
string = Ss
int = A_i
double
= A_d
vector = St6vectorIiSaIiE