C++テストコード

8648 ワード

 1 /*

 2           n       n 

 3 */

 4 

 5 #include <iostream>

 6 

 7 unsigned long left(unsigned long num, int n);

 8 char * left(char * str, int n);

 9 

10 using namespace std;

11 

12 int main()

13 {

14     unsigned long  num;

15     int n;

16     cout << "       :";

17     cin >> num;

18     cout << "         :";

19     cin >> n;

20     cout << " " << n << "  " << left(num, n) << endl;

21 

22     char * str = new char(20);

23     cout << "        :";

24     cin >> str;

25     cout << "         :";

26     cin >> n;

27     cout << " " << n << "  " << left(str, n) << endl;

28 

29     //delete[] str;

30 

31     cin.get();

32     cin.get();

33 }

34 

35 

36 unsigned long left(unsigned long num, int n)

37 {

38     unsigned long len = 1;    //          

39     unsigned long temp_num = num;

40     while (temp_num /= 10)

41     {

42         len++;

43     }

44     unsigned long cut_num_len = len - (unsigned long(n) >= len ? len : unsigned long(n));    // n        ,         

45     while (cut_num_len--)

46     {

47         num /= 10;

48     }

49     return num;

50 }

51 

52 char * left(char * str, int n)

53 {

54     int len = strlen(str);

55     n = n >= len ? len : n;

56     char * temp_char = new char(n + 1);

57 

58     for (int i = 0; i < n; i++) {

59         *(temp_char + i) = *(str + i);

60     }

61     temp_char[n] = '\0';

62     return temp_char;

63 }

皆さん、私が//delete[]strをキャンセルしたとき、質問があります.注釈後、プログラムが間違っているのは、new自作のポインタならdeleteを落としたほうがいいという励ましではないでしょうか.正解を求める.