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

個人的自由ノート

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

C++で問題を解く

ちょっと今回不思議な事が起こったので次回、それについて取り上げてみます。

#include <iostream>

using namespace std;

char* strcpy(char* s1, const char* s2){
  char* p = s1; // アドレスを退避させる。s1を変化させてもpのアドレスは変更されない。ここではアドレスを代入してるだけ。
  while(*s1++ = *s2++)
    ;
  return p;
}

char* strncpy(char* s1, const char* s2, size_t n){
  char* p = s1;
  for(int i = 0; i < n; i++){
    if(*s2){
      *s1++ = *s2++;
    }else{
      *s1++ = '\0';
    }
  }
  return p;
}

int main(void){
  char* s1 = (char*)malloc(sizeof(char) * 16);
  char* s2 = (char*)malloc(sizeof(char) * 16);
  char* s3 = (char*)malloc(sizeof(char) * 16);
  char* tmp = (char*)malloc(sizeof(char) * 16);

  cout << "文字列を入力してください:";
  cin >> tmp;

  strcpy(s1, strcpy(s2, tmp));
  strcpy(s3, tmp);

  cout << "文字列s1は\"" << s1 << "\"です。" << endl;
  cout << "文字列s2は\"" << s2 << "\"です。" << endl;
  cout << "文字列s3は\"" << s3 << "\"です。" << endl;

  char* x = "XXXXXXXXX";

  strcpy(s3, x); strncpy(s3, "12345", 3); cout << s3 << endl;
  strcpy(s3, x); strncpy(s3, "12345", 5); cout << s3 << endl;
  strcpy(s3, x); strncpy(s3, "12345", 7); cout << s3 << endl;
  strcpy(s3, x); strncpy(s3, "1234567890", 9); cout << s3 << endl;

  return 0;
}



#include <iostream>

using namespace std;

char* strcpy(char* s1, const char* s2){
  char* p = s1; // アドレスを退避させる。s1を変化させてもpのアドレスは変更されない。ここではアドレスを代入してるだけ。
  while(*s1++ = *s2++)
    ;
  return p;
}

char* strncpy(char* s1, const char* s2, size_t n){
  char* p = s1;

  while(n){
    n--;
    if(!(*s1++ = *s2++)) break;
  }
  while(n--)
    *s1++ = '\0';

  return p;
}

int main(void){
  char* s1 = (char*)malloc(sizeof(char) * 16);
  char* s2 = (char*)malloc(sizeof(char) * 16);
  char* s3 = (char*)malloc(sizeof(char) * 16);
  char* tmp = (char*)malloc(sizeof(char) * 16);

  cout << "文字列を入力してください:";
  cin >> tmp;

  strcpy(s1, strcpy(s2, tmp));
  strcpy(s3, tmp);

  cout << "文字列s1は\"" << s1 << "\"です。" << endl;
  cout << "文字列s2は\"" << s2 << "\"です。" << endl;
  cout << "文字列s3は\"" << s3 << "\"です。" << endl;

  char* x = "XXXXXXXXX";

  strcpy(s3, x); strncpy(s3, "12345", 3); cout << s3 << endl;
  strcpy(s3, x); strncpy(s3, "12345", 5); cout << s3 << endl;
  strcpy(s3, x); strncpy(s3, "12345", 7); cout << s3 << endl;
  strcpy(s3, x); strncpy(s3, "1234567890", 9); cout << s3 << endl;

  return 0;
}



#include <iostream>

using namespace std;

char* strcat(char* s1, const char* s2){
  char* p = s1;
  while(*s1)
    s1++;
  while(*s1++ = *s2++)
    ;
  return p;
}

char* strncat(char* s1, const char* s2, size_t n){
  char* p = s1;
  while(*s1)
    s1++;
  for(int i = 0; i < n; i++){
    if(*s2){
      *s1++ = *s2++;
    }
  }
  *s1 = '\0';
  return p;
}

int main(void){
  char a[] = "QWE";
  char b[] = "RTY";
  char s[] = "ABC";

  strcat(a, b);
  cout << a << endl;

  strncat(s, "123456789", 5);
  cout << s << endl;

  return 0;
}




#include <iostream>

using namespace std;

char* strcat(char* s1, const char* s2){
  char* p = s1;
  while(*s1)
    s1++;
  while(*s1++ = *s2++)
    ;
  return p;
}

char* strncat(char* s1, const char* s2, size_t n){
  char* p = s1;
  while(*s1)
    s1++;
  while(n--){
    if(!(*s1++ = *s2++))
      break;
  }
  *s1 = '\0';
  return p;
}

int main(void){
  char a[] = "QWE";
  char b[] = "RTY";
  char s[] = "ABC";

  strcat(a, b);
  cout << a << endl;

  strncat(s, "123456789", 5);
  cout << s << endl;

  return 0;
}