読者です 読者をやめる 読者になる 読者になる

個人的自由ノート

ふと自分が気になった事を書いてます

C++で問題を解く

こんな感じです。やっと文字列ポインタが終わりました。次は関数の応用かな。途中、本の解答を丸々参考にして組んだものもありますが、参考にしても動かなかったので、多分本の誤植だと思います。公式サイトに行っても正誤表が準備段階なので確認出来ませんでした。まあ、これはお蔵入りにします。一応載せてますけど。

#include <iostream>
#include <cstdlib>

using namespace std;

void swap_string(char* s1, char* s2){
    char* temp;

    while(*s1 && *s2){
        char t = *s1;
        *s1 = *s2;
        *s2 = t;
        s1++;
        s2++;
    }

    if(*s1){
        temp = s1;
        while(*s1){
            *s2++ = *s1++;
        }
        *temp = *s2 = '\0';
    } else {
        temp = s2;
        while(*s2){
            *s1++ = *s2++;
        }
        *temp = *s1 = '\0';
    }
}

int main(void){
    char* s1 = (char*)calloc(16, sizeof(char));
    char* s2 = (char*)calloc(16, sizeof(char));

    cout << "文字列s1 : ";
    cin >> s1;
    cout << "文字列s2 : ";
    cin >> s2;
    
    swap_string(s1, s2);

    cout << s1 << endl;
    cout << s2 << endl;

    return 0;
}
#include <iostream>
#include <cstdlib>
#include <cctype>

using namespace std;

int str2int(const char* s){
    int sign = 1;

    while(isspace(*s))
        s++;
    
    switch(*s){
        case '+' : s++; break;
        case '-' : s++; sign = -1; break;
    }

    unsigned v = 0;

    while(*s){
        if(!isdigit(*s))
            return 0;
        v = v * 10 + (*s - '0');
        s++;
    }

    return (sign == 1) ? v : -v;
}

int main(void){
    char* s = (char*)calloc(16, sizeof(char));

    cout << "文字列 : ";
    cin >> s;

    cout << str2int(s) << endl;

    return 0;
}
#include <iostream>
#include <cstdlib>
#include <cctype>

using namespace std;

double str2double(const char* s){
    while(isspace(*s))
        s++;

    int sign = 1;
    switch(*s){
        case '+' : s++; break;
        case '-' : s++; sign = -1; break;
    }

    double v = 0.0;
    for(; isdigit(*s); s++)
        v = v * 10.0 + (*s - '\0');
    if(*s == '.')
        s++;
    double dec = 1.0;
    for(; isdigit(*s); s++)
        v = v + (dec /= 10.0) * (*s - '\0');
    if(*s == 'E' || *s == 'e'){
        int sign = 1;
        switch(*++s){
            case '+' : s++; break;
            case '-' : s++; sign = -1; break;
        }
        int exp = 0;
        for(; isdigit(*s); s++)
            exp = 10 * exp + (*s - '\0');
        if(*s)
            v = 0.0;
        else {
            switch(sign){
                case 1 : while(exp-- > 0) v *= 10.0; break;
                case -1 : while(exp-- > 0) v /= 10.0; break;
            }
        }
    } else if(*s)
        v = 0.0;

    return sign * v;
}

int main(void){
    char* s = (char*)calloc(16, sizeof(char));

    cout << "文字列 : ";
    cin >> s;
    cout << str2double(s) << endl;

    return 0;
}
#include <iostream>
#include <cstdlib>

using namespace std;

void swap(const char* s1, const char* s2){
    const char* t = s1;
    s1 = s2;
    s2 = t;
}

int main(void){
    char* s1 = (char*)calloc(16, sizeof(char));
    char* s2 = (char*)calloc(16, sizeof(char));

    cout << "s1が指す文字列:";
    cin >> s1;
    cout << "s2が指す文字列:";
    cin >> s2;

    swap(s1, s2);

    cout << "s1:" << s1 << endl;
    cout << "s2:" << s2 << endl;

    return 0;
}
#include <iostream>

using namespace std;

void swap(char** x, char** y){
    char* t = *x;
    *x = *y;
    *y = t;
}

int main(void){
    char* s1 = "ABCD";
    char* s2 = "XYZ";

    cout << s1 << endl;
    cout << s2 << endl;

    swap(&s1, &s2);

    cout << "交換後" << endl;

    cout << s1 << endl;
    cout << s2 << endl;

    return 0;
}