C/C++のいくつかの知識点のまとめ(一)

11083 ワード

最近、大学院受験の再試験を準備して、問題をブラシする過程で、いくつかの問題を解く過程の知識の盲区といくつかの犯しやすい間違い、踏んだ穴を記録しました.【1】string中+操作では整数型は演算できません.
int i=100;
string str="   :";
string str2;
str2=str+i;//(x)      str2="   :100"
cout<

これは明らかに通用しません.C言語では整数変数を文字列に直接加算することはできません(Javaでは文字列Stringにこのような文法糖が直接加算することができます).どのようにして整数変数を文字列に変換して別の文字列に加算しますか?
#include 
    ......

    int a=125;
    char b[50];   
    printf("%s
"
,itoa(a,b,10));// 10 125 。

関数プロトタイプ:char*itoa(int value,char*string,int radix);int value変換された整数、char*string変換後に格納された文字配列、int radix変換進数、例えば2,8,10,16進数などitoaを使用するにはinclude【2】外挂をインポートする必要があり、sort関数sort関数はソート関数であり、機能は非常に強く、外挂と計算されているが、どのように具体的に使用するかは検索できる
 #include;
 using namespace std ;

ヘッダファイルにはalgorithmヘッダファイルが含まれています.USing namespace std文を使用して、標準ネーミングスペース(sortが定義されている)を使用することを宣言します.【3】cout出力制御cout出力精度floatおよびdoubleタイプを含む浮動小数点数出力に使用します.出力精度を制御するには、ヘッダファイルiomanipを参照し、setiosflags(ios::fixed)を使用し、setprecision()を使用します.で行ないます.
使用方法はサンプルコードを参照してください.
#include
#include
using namespace std;

int main()
{
    double f = 3.1415926535;
    cout << f << endl; // 3.14159        。
    cout <//        ,setprecision         。
    cout << setprecision(0) << f << endl;    //  0   ,3
    cout << setprecision(1) << f << endl;    //  1   ,3.1
    cout << setprecision(2) << f << endl;    //  2   ,3.14
    cout << setprecision(3) << f << endl;    //  3   ,3.142
    cout << setprecision(4) << f << endl;    //  4   ,3.1416
    return 0;
}

【4】str[i]!=0とstr[i]!='0'の区別と使用方法ソース:文字列の長さを計算する
#include
void main()
{   
    char str[ 80];
    int i,len;
    scanf("%s",str);
    len=0;
    for (i=0;str[i]!='\0';i++)
        len++;
    for (i=0;str[i]!=0;i++)
        putchar(str[i]);

    printf("strlenth=%d
"
,len); }

NULLも入れて一緒に話しましょう.'0’,0,NULLの3つの真の値はいずれも0であり,何の違いもない.3つの書き方があるのは、プログラムの読み取りのためです.「0」を使うと、ch!='」などの文字列を操作している終了文字を表します.0’;NULLを使用する場合、int*p=NULLなどのポインタを「空」に設定することが多い.0は自然にint c=0などの数字0です.【5】scanf,gets,getlineの使用の違いscanf()関数を使用すると、スペースが返されます.gets()関数を使用すると、スペースが返されず、リターンが返されます.gets()フォーマット:
char *p;
gets(p);

では、文字列はpをはじめとしてアドレスが格納され、pに十分なスペースを割り当てることを覚えておくといいでしょう.例:
char str[20];  //         ,   20   
gets(str);     //          (      )       str ,       
printf("%s", str);  //           (    )


c++ string
string str;
getline(cin,str)//          

【6】異なるタイプの変数はforサイクルで一緒に初期化できない
//eg1 (x)
int i;double j;
for(i=0,j=1;i<10;i++;j--)//j i    
{
//......
}

//eg2(x)//j i    
for(double i=0,int j=1;i<10;i++;j--)
{
//......
}

【7】試験データの入力を自動完了する方法
freopen("a.txt","r",stdin);
// a.txt       ;           a.txt


【8】文字比較変換判定ルックアップ関数ライブラリctype.hはC標準関数ライブラリのヘッダファイルであり、文字がアルファベット文字、制御文字などの特定の文字カテゴリに属するかどうかをテストするC言語文字分類関数(C character classification functions)を定義している.シングルバイト(Byte)もサポートされている文字、ワイド文字もサポートされています.isalpha関数名:isalpha関数プロトタイプ:int isalpha(char ch);関数機能:chがアルファベットかどうかをチェックします.関数の戻り:アルファベットが0でない(vs 2015では2)を返し、そうでない場合は0.isdigit関数名:isdigit関数プロトタイプ:int isdigit(char ch)を返します.関数機能:chが数値(0-9)関数であるかどうかを確認します:0でないことを返します.そうしないと、0 islower関数名を返します:islower関数プロトタイプ:int islower(int ch);関数機能:chが小文字(a-z)関数で返されるかどうかを確認します:0ではなく、0 isupper関数名を返します:isupper関数プロトタイプ:int isupper(int ch);関数機能:chが大文字(A-Z)関数であるかどうかを確認します:0でないことを返します.そうしないと、0 isalnum関数名を返します:isalnum関数プロトタイプ:int isalnum(int ch);関数機能:chがアルファベットまたは数値関数であるかどうかを確認します:アルファベットまたは数値で0以外を返します.そうでない場合は0を返します.
リンク:http://baike.baidu.com/link?url=UJCJrGBrFwCil15bQbEBbpovyLBdOjVBTXi7JFoVSKqrza9NdI4ovoCZbmngLhSh4_5fwg-gWZHhOud 9 Hqm 0 Pq【9】数学式のほとんどの行列関数は行列のみを定義し、A^0もn次行列Aにとって、A^0がゼロであるかどうかにかかわらず、A^0はn次単位行列が残数を重視する性質として定義される:(a+b)%m=(a%m+b%m)%m)%m a*b%c=((a%c)*b)%c)%a^b%c=(a%c)^b%c整数a,b最大公約数a,b最大公約数=b,a%bの最大公約数整数a,b最小公約数a,b最小公約数=a*b/(a,b最大公約数)
#include
using namespace std;
int main()
{
    int a,b;
    while(cin>>a>>b)
    {
        int temp=a*b;
        for(;b;)
        {
            a=b;
            b=a%b;
        }
        cout<//     
cout<//     
}
}

【10】~scanf("%d",&a)while(~scanf("%d",&a))これはscanf("%d",&a)!=EOF EOF一般的に定義されているのは-1であり、-1はビット取り逆(~)は0である.【11】取値範囲unsigned int 0~4294967295 int 2147483648~2147483647 unsigned long 0~4294967295 long 2147483648~2147483647 long longの最大値:922337203685475807 longの最小値:-922337203620366854775808 unsigned longの最大値:1844674407370955161_int 64の最大値:92233720366854775807_int 64の最小値:-9223372036854775808 unsigned __int 64の最大値:18446744073709551615【12】演算子の意味説明&ビット順:両方の対応するバイナリビットが1の場合、そのビットの結果値は1であり、そうでなければ0|ビット順または:両方の対応するバイナリビットのうち1つが1の場合、そのビットの結果値は1^ビット順:演算に参加する2つのバイナリビット値が同じであれば0であり、そうでなければ1~逆:~は1元である演算子、1つのバイナリ数に対してビットによって逆を取って、間もなく0が1になって、1を0<<左に移動します:1つの数の各バイナリビットをすべてNビット左に移動して、右は0を補います>>右に移動します:1つの数の各バイナリビットをNビット右に移動して、右端の低位に移動して捨てられて、記号のない数に対して、高位補0【13】配列は全体的に値を付与できない配列であり、全体的に値を付与できないものであり、初期化時にint data[3]={0,1,2}のように統一的に値を付与するしかない.(割り当てを行わないと、自動的に0に初期化されます(文字型配列の場合は'0'に初期化され、ポインタ配列の場合はNULL、すなわち空のポインタに初期化されます)が、書き込みサイクルを避けるために配列の割り当てが必要になることがよくあります.これはできますか?C言語で付与できるのは変数だけで、配列を変数化すれば、変数を付与するときに配列を付与してしまうのではないでしょうか.配列を含むタイプは構造体のみです.次のことができます.
    struct name  
    {  
        int array[10];  
    }a, b;  

すると、a=b;を選択すると、配列の割り当てが完了します.
【14】素因数を分解する方法
#include
using namespace std;
int main()
{
    int n;
    int count;
    while(cin>>n)
    {
        count=0;
        for(int i=2;n!=1;i++)
            if(n%i==0)
            {
                cout<"  "; 
                n=n/i;
                count++; 
                i--;
                /*i-- i++  i    ,   N             ,
                  :24    2     3*/
            }
        cout<<"
total: "
<