[关闭]
@quinn 2015-03-20T01:27:33.000000Z 字数 1992 阅读 1648

字符串基本处理操作:数组和指针实现 —— 不调用string函数库

数据结构 C/C++基础


自己手动实现的字符串基本处理操作
索引数组版本 array_mode.h

  1. //统计长度
  2. int strlen1(const char s[])
  3. {
  4. int i;
  5. for(i = 0; s[i] != 0; i++);
  6. return i;
  7. }
  8. //Copy
  9. char* strcpy1( char s2[], const char s1[])
  10. {
  11. int i;
  12. for(i = 0; (s2[i] = s1[i]) != 0; i++);
  13. return s2;
  14. }
  15. //Compare
  16. int strcmp1(const char s1[], const char s2[])
  17. {
  18. int i = 0;
  19. for (; s1[i] == s2[i]; i++)
  20. {
  21. if (s1[i] == 0) //s1[i], s2[i] 同时为0
  22. {
  23. return 0;
  24. }
  25. }
  26. return s1[i] - s2[i];
  27. }
  28. //Compare first n characters
  29. int strncmp1(const char s1[], const char s2[], int n)
  30. {
  31. int i = 0;
  32. for (; s1[i] == s2[i]; i++)
  33. {
  34. if (s1[i] == 0 || (i+1) == n)
  35. {
  36. return 0;
  37. }
  38. }
  39. return s1[i] - s2[i];
  40. }
  41. //追加
  42. char* strcat1(char* s1, const char* s2)
  43. {
  44. int i = 0, j = 0;
  45. for ( ; s1[i] != 0; i++);
  46. for ( ; (s1[i] = s2[j]) != 0; i++, j++);
  47. return s1;
  48. }

指针版本 pointer_mode.h

  1. //统计长度
  2. int strlen2(const char* s)
  3. {
  4. int i = 0;
  5. while(*s++)
  6. i++;
  7. return i;
  8. }
  9. //Copy
  10. char* strcpy2( char *s2, const char *s1)
  11. {
  12. while ( *s2++ = *s1++);
  13. return s2;
  14. }
  15. //Compare
  16. int strcmp2(const char* s1, const char* s2)
  17. {
  18. while(*s1++ == *s2++)
  19. {
  20. if (*(s1-1) == 0) //s1[i], s2[i] 同时为 '\0'
  21. {
  22. return 0;
  23. }
  24. }
  25. return *(s1-1) - *(s2-1);
  26. }
  27. //Compare first n characters
  28. int strncmp2(const char* s1, const char* s2, int n)
  29. {
  30. while(*s1++ == *s2++)
  31. {
  32. n--;
  33. if (*(s1-1) == 0 || n == 0) //s1[i], s2[i] 同时为 '\0'
  34. {
  35. return 0;
  36. }
  37. }
  38. return *(s1-1) - *(s2-1);
  39. }
  40. //追加
  41. char* strcat2(char* s1, const char* s2)
  42. {
  43. while(*s1++);
  44. s1--;
  45. while(*s1++ = *s2++);
  46. return s1;
  47. }

测试函数 main.cpp

  1. #include<stdio.h>
  2. #include <stdlib.h>
  3. #include "array_mode.h"
  4. #include "pointer_mode.h"
  5. int main()
  6. {
  7. char str1[50] = "Hello,HIT";
  8. char str2[30] = "Hello,SZIIT";
  9. char str3[30], str4[30];
  10. //计算字符串长度
  11. printf("strlen1(str1) = %d\n", strlen1(str1));
  12. printf("strlen2(str1) = %d\n", strlen2(str1));
  13. //复制字符串
  14. strcpy1(str3,str1);
  15. printf("str3 = %s\n", str3);
  16. strcpy2(str4,str1);
  17. printf("str4 = %s\n", str4);
  18. //比较
  19. printf("strcmp1(str1, str2) = %d\n", strcmp1(str1, str2));
  20. printf("strcmp1(str1, str3) = %d\n", strcmp1(str1, str3));
  21. printf("strcmp2(str1, str2) = %d\n", strcmp2(str1, str2));
  22. printf("strcmp2(str1, str3) = %d\n", strcmp2(str1, str3));
  23. //前缀比较
  24. printf("strncmp1(str1, str2) = %d\n", strncmp1(str1, str2, 6));
  25. printf("strncmp2(str1, str2) = %d\n", strncmp2(str1, str2, 6));
  26. //追加
  27. strcat1(str1, "hehe");
  28. printf("str1 = %s\n", str1);
  29. strcat2(str1, "haha");
  30. printf("str1 = %s\n", str1);
  31. system("pause");
  32. return 0;
  33. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注