c++课后作业

[复制链接]
发表于 2026-2-23 18:09:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
把字符串转换为整数
  1. int main()
  2. {
  3.         char pn[21];
  4.         cout << "请输入一个由数字组成的字符串: ";
  5.         cin >> pn;
  6.         int last = 0;
  7.         int res[10];
  8.         int j = strlen(pn);
  9.         int idx = 2;
  10.         cout << "请选择(2-二进制,10-十进制): ";
  11.         cin >> idx;
  12.         for (int i = 0,len = strlen(pn);i < len; i++)
  13.         {
  14.                 if (pn[i] < '0' || pn[i] > '9') { cout << "非法字符!!!"; break; }
  15.                 last += (pn[i] - '0') * pow(idx,j-1);
  16.                 j = j - 1 ;
  17.         }
  18.         cout << last;
  19. }
复制代码
重写strcat和strncat
  1. char* mystrcat(char* dest, const char* src)
  2. {
  3.     memcpy(dest + strlen(dest), src, strlen(src) + 1);
  4.     return dest;
  5. }
  6. char* mystrncat(char* dest, const char* src, const size_t n)
  7. {
  8.     size_t len = strlen(dest);
  9.     memcpy(dest + len, src, n);
  10.    
  11.     *(dest + len + n) = 0;
  12.     return dest;
  13. }
复制代码
重写strchr和strrchr

留意⚠️:这里不能从后往前找,由于想从后往前找就只能利用strlen,而strlen本质就是遍历一遍字符串,如许就更慢了。
  1. const char* mystrchr(const char* s, int c)
  2. {
  3.     char* p = (char*)s;
  4.     while (*p)
  5.     {
  6.         if (*p == c) return p;
  7.         p++;
  8.     }
  9.     return 0;
  10. }
  11. const char* mystrrchr(const char* s, int c) //查找字符
  12. {
  13.     char* p = (char*)s;
  14.     char* p1 = 0;
  15.     while (*p)
  16.     {
  17.         if (*p == c)
  18.         {
  19.             p1 = p;
  20.         }
  21.         p++;
  22.     }
  23.     return p1;
  24.    
  25. }
复制代码
重写strcmp和strncmp
  1. int mystrcmp(const char* str1, const char* str2)
  2. {
  3.     char* p1 = (char*)str1;
  4.     char* p2 = (char*)str2;
  5.     while (*p1 && *p2)
  6.     {
  7.         if (*p1 != *p2)
  8.         {
  9.             if (*(p1) > *(p2)) return -1;
  10.             else return 1;
  11.         }
  12.         p1++;
  13.         p2++;
  14.     }
  15.     return 0;
  16. }
  17. int mystrncmp(const char* str1, const char* str2, size_t n)
  18. {
  19.     char* p1 = (char*)str1;
  20.     char* p2 = (char*)str2;
  21.    
  22.     for (int i = 0; i < n; i++)
  23.     {
  24.         if (*p1 != *p2)
  25.         {
  26.             if (*(p1) > *(p2)) return -1;
  27.             else return 1;
  28.         }
  29.         p1++;
  30.         p2++;
  31.     }
  32.     return 0;
  33.    
  34. }
复制代码
重写strstr
  1. char* caijimystrstr(const char* haystack, const char* needle)
  2. {
  3.     char* p1 = (char*)haystack;
  4.     char* p2 = (char*)needle;
  5.     char* tmp1;
  6.     char* tmp2 = p2;
  7.     while (*p1)
  8.     {
  9.         while (*p1 == *p2)
  10.         {
  11.             tmp1 = p1;
  12.             for (int i = 0; i < strlen(needle); i++)
  13.             {
  14.                
  15.                 if (*p1 != *p2)
  16.                 {
  17.                     continue;
  18.                 }
  19.                 p1++;
  20.                 p2++;
  21.                 if (*p2 == 0)
  22.                 {
  23.                     return p1-strlen(needle);
  24.                 }
  25.             }
  26.             
  27.             continue;
  28.       
  29.         }
  30.         p2 = tmp2;
  31.         p1++;
  32.         
  33.     }
  34.     return nullptr;
  35. }
  36. const char* dalaomystrstr(const char* haystack, const char* needle)
  37. {
  38.     size_t ii = 0, jj = 0;
  39.     size_t len = strlen(haystack), slen = strlen(needle);
  40.     while ((ii < len) && (jj < slen))
  41.     {
  42.         if (haystack[ii] == needle[jj])
  43.         {
  44.             ii++, jj++;
  45.         }
  46.         else
  47.         {
  48.             ii = ii - jj;
  49.             jj = 0;
  50.             ii++;
  51.         }
  52.     }
  53.     if (jj == slen) return (haystack+(ii-jj));
  54.     return 0;
  55. }
复制代码
剖析XML
  1. bool xmlbuffer(const char* xmlbuf, const char* fieldname, char* value = 0, const size_t ilen = 0)
  2. {
  3.     if (xmlbuf == 0 || fieldname == 0) return false;
  4.     //创建字段
  5.     int lenfieldname = strlen(fieldname);
  6.     //开辟空间
  7.     char* sfieldname = new char[lenfieldname + 3];
  8.     char* efieldname = new char[lenfieldname + 4];
  9.     //初始化
  10.     memset(sfieldname, 0, lenfieldname +3);  // 错误代码 memset(sfieldname, 0, sfieldname); 原因:new出来的空间不能用memset
  11.     memset(efieldname, 0, lenfieldname +4);
  12.     //创建字段
  13.     strcpy(sfieldname, "<"); strcat(sfieldname, fieldname); strcat(sfieldname,">");
  14.     strcpy(efieldname, "</"); strcat(efieldname, fieldname); strcat(efieldname, ">");
  15.     //找字段;
  16.     char* start;
  17.     char* end;
  18.     start = (char*)strstr(xmlbuf, sfieldname);
  19.     end = (char*)strstr(xmlbuf, efieldname);
  20.     //没找到
  21.     if (start == 0 || end == 0)
  22.     {
  23.         delete[] sfieldname;
  24.         delete[] efieldname;
  25.         return 0;
  26.     }
  27.    
  28.     size_t vallen = (end - start - lenfieldname - 2);  //指针减去指针等于数值,表示的是从 start 到 end 的距离减去了 lenfieldname(<fieldname> 的长度)和 2(< 和 > 的长度)。
  29.    
  30.     if (ilen == 0)
  31.     {
  32.         
  33.         strncpy(value, start + lenfieldname + 2, vallen);
  34.         value[vallen] = 0;
  35.     }
  36.     else if (vallen <= ilen)
  37.     {
  38.         strncpy(value, start + lenfieldname + 2, vallen);
  39.         value[vallen] = 0;
  40.     }
  41.     else
  42.     {
  43.         strncpy(value, start + lenfieldname + 2, ilen);
  44.         value[ilen] = 0;
  45.     }
  46.     delete[] sfieldname;
  47.     delete[] efieldname;
  48.     return 1;
  49. }
复制代码
不重复的随机数
  1. void rrand(int arr[], const size_t len, const int minvalue = 0)
  2. {
  3.     srand(time(0));
  4.     for (int i = 0; i < len; i++)
  5.     {
  6.         while (1)
  7.         {
  8.             int tmp = rand() % len + minvalue;
  9.             int j = 0;
  10.             for (j = 0; j < i; j++)
  11.             {
  12.                 if (tmp == arr[j]) break;
  13.             }
  14.             if (j == i)
  15.             {
  16.                 arr[i] = tmp;
  17.                 break;
  18.             }
  19.         }
  20.     }
  21. }
复制代码
重写strcpy和strncpy
  1. char* my2strcpy(char* dest, const char* src)
  2. {
  3.     int i = 0;
  4.     while (src[i])
  5.     {
  6.         dest[i] = src[i];
  7.         i++;
  8.     }
  9.     dest[i] = 0;
  10.     return dest;
  11. }
  12. char* my2strncpy(char* dest, const char* src , const size_t n )
  13. {
  14.     if (n < 0) return 0;
  15.     size_t lens = strlen(src);
  16.     if (n > lens)
  17.     {
  18.         my2strcpy(dest, src);
  19.     }
  20.     int i = 0;
  21.     for (i = 0; i < n; i++)
  22.     {
  23.         dest[i] = src[i];
  24.     }
  25.     dest[i++] = 0;
  26.     return dest;
  27. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表