Chinaunix首页 | 论坛 | 博客
  • 博客访问: 298392
  • 博文数量: 134
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 118
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-01 14:02
文章分类

全部博文(134)

文章存档

2015年(2)

2014年(4)

2013年(128)

分类: C/C++

2013-08-01 14:14:23

原文地址:字符串操作 _0220 作者:丫叩酱


点击(此处)折叠或打开

  1. 1.#sizeof 某种类型所占字节数
  2.   #strlen 有效字符的个数('\0')
  3. #include <stdio.h>

  4. int main(int argc, const char *argv[])
  5. {
  6.     char str[]="hello";
  7.     char *p="hello";

  8.     printf("sizeof(str)=%d\n",sizeof(str));
  9.     printf("sizeof(p)=%d\n",sizeof(p));

  10.     printf("strlen(str)=%d\n",strlen(str));
  11.     printf("strlen(p)=%d\n",strlen(p));
  12.     return 0;
  13. }
  14. 2.#自定义一个函数:求字符串长度
  15. #include <stdio.h>

  16. int mystrlen(char *str)
  17. {
  18.     int cnt=0;
  19.     while(*str)
  20.     {
  21.         printf("%c",*str++);
  22.         cnt++;
  23.     }
  24.     printf("\n");
  25.     return cnt;
  26. }

  27. int main(int argc, const char *argv[])
  28. {
  29.     char str[]="I like programming!";
  30.     printf("strlen=%d\n",mystrlen(str));
  31.     return 0;
  32. }
  33. 3.#将str数组里的内容反向输出
  34. #include <stdio.h>

  35. void opp(char *str)
  36. {
  37.     char *bak=str;
  38.     while(*str)
  39.         str++;
  40.     for (; str>=bak; str--)
  41.         printf("%c",*str);
  42.     printf("\n");

  43. }

  44. int main(int argc, const char *argv[])
  45. {
  46.     char str[]="I like programming!";
  47.     opp(str);
  48.     return 0;
  49. }
  50. 4.#对于str数组里的所有小写字符改写成大写输出
  51. #include <stdio.h>

  52. char *low_up(char *str)
  53. {
  54.     char *bak=str;
  55.     while(*str)
  56.     {
  57.         if(*str>='a'&&*str<='z')
  58.             *str=*str-32;
  59.         str++;
  60.     }
  61.     return bak;
  62. }

  63. int main(int argc, const char *argv[])
  64. {
  65.     char str[]="I like programming!";
  66.     printf("%s\n",low_up(str));
  67.     return 0;
  68. }
  69. 5.#判断输入的字符串是否为“回文”字符串
  70. #include <stdio.h>
  71. #include <string.h>

  72. int plalindrome_is(char *str,int len)
  73. {
  74.     int i;
  75.     char *head,*tail;
  76.     head=str;
  77.     tail=str+len-1;
  78.     for (i=0;i<len/2; head++,tail--,i++)
  79.     {
  80.         if(*head!=*tail)
  81.             return 0;
  82.     }
  83.     return 1;
  84. }

  85. int main(int argc, const char *argv[])
  86. {
  87.     char *p,str[32];
  88.     printf("str=");
  89.     scanf("%s",str);
  90.     if(plalindrome_is(str,strlen(str)))
  91.         printf("plalindrome.\n",str);
  92.     else
  93.         printf("not plalindrome.\n",str);
  94.     return 0;
  95. }
  96. 6.#从键盘接收一个字符串,然后按字符顺序从大到小进行排序并删除重复字符
  97. #include <stdio.h>
  98. #include <string.h>

  99. void del(char str[])
  100. {
  101.     int i, j, k;

  102.     for(i = j = k = 0; str[i]; i++)
  103.     {
  104.         for(j = k - 1; j >= 0; j--)
  105.             if(str[j] == str[i])
  106.                 break;
  107.         if(j < 0)
  108.             str[k++] = str[i];
  109.     }
  110.     str[k] = '\0';
  111. }

  112. void sort(char str[])
  113. {
  114.     int len = strlen(str), i, j, pos;
  115.     char tmp;

  116.     for(i = 0; i < len - 1; i++)
  117.     {
  118.         pos = i;
  119.         for(j = i + 1; j < len; j++)
  120.             if(str[pos] > str[j])
  121.                 pos = j;
  122.         if(pos != i)
  123.         {
  124.             tmp = str[pos];
  125.             str[pos] = str[i];
  126.             str[i] = tmp;
  127.         }

  128.     }
  129.     
  130. }
  131. int main(void)
  132. {
  133.     char str[100];

  134.     gets(str);
  135.     del(str);
  136.     sort(str);
  137.     puts(str);
  138.     return 0;
  139. }



  140. #include <stdio.h>
  141. #include <string.h>
  142. char *func(char *str,int len)
  143. {
  144.     int i,j,flag;
  145.     char tmp;
  146.     for (i = 0; i < len-1; i++)
  147.     {
  148.         for (j = i+1; j < len; j++)
  149.         {
  150.             if(str[i]>str[j])
  151.             {
  152.                 tmp=str[i];
  153.                 str[i]=str[j];
  154.                 str[j]=tmp;
  155.             }
  156.         }
  157.     }

  158.     for (i = 0; i < len-1; i++)
  159.     {
  160.         for (j = i+1; j < len; j++)
  161.         {
  162.             if(str[i]==str[j])
  163.             {
  164.                 flag=j;
  165.                 while(str[flag++])
  166.                     str[flag-1]=str[flag];
  167.                 len--;
  168.                 j--;
  169.             }
  170.         }
  171.     }
  172.     return str;
  173. }

  174. int main(int argc, const char *argv[])
  175. {
  176.     char str[32];
  177.     printf("str=");
  178.     scanf("%s",str);
  179.     printf("%s\n",func(str,strlen(str)));
  180.     return 0;
  181. }
  182. 7.#编写程序计算一个英文句子中最长单词的长度(字母个数)
  183. #include <stdio.h>
  184. #include <string.h>

  185. int word_maxlengh(char *str)
  186. {
  187.     int i=0,j=0,max=0,a[10]={0};
  188.     while(*str)
  189.     {
  190.         if(* ')
  191.             a[i]=++j;
  192.         else
  193.         {
  194.             j=0;
  195.             a[++i]=0;
  196.         }
  197.         str++;
  198.     }
  199.     for (i = 0; i < 5; i++)
  200.     {
  201.         if(max<a[i])
  202.             max=a[i];
  203.     }
  204.     return max;
  205. }

  206. int word_num(char *str)
  207. {
  208.     int cnt=0,flag=1;
  209.     while(*str)
  210.     {
  211.         if((* ')&&((*(str+1)==' ')|(*(str+1)=='\0')))
  212.             cnt++;
  213.         str++;
  214.     }
  215.     return cnt;
  216. }

  217. int main(int argc, const char *argv[])
  218. {
  219.     char str[50];
  220.     char *bak=str;
  221.     printf("str=");
  222.     fgets(str,50,stdin);
  223.     str[strlen(str)-1]='\0';
  224.     printf("word_maxlengh=%d\n",word_maxlengh(str));
  225.     printf("word_num=%d\n",word_num(str));
  226.     return 0;
  227. }
  228. 7.#编写程序计算一个英文句子中最长单词的长度(字母个数)
  229. #include <stdio.h>
  230. #include <string.h>

  231. 方法1:
  232. int main(void)
  233. {
  234.     char str[100];
  235.     int i, start, end, max = 0;

  236.     gets(str);

  237.     for(i = 0; str[i]; i++)
  238.     {
  239.         for(start = i; str[start] == ' '; start++)
  240.             ;
  241.         for(end = start; str[end] && str[end] != ' '; end++)
  242.             ;
  243.         i = end;
  244.         if(max < end - start)
  245.             max = end - start;
  246.     }
  247.     printf("max = %d\n", max);

  248.     return 0;
  249. }

  250. 方法2:
  251. int word_maxlengh(char *str)
  252. {
  253.     int i=0,j=0,max=0,a[10]={0};
  254.     while(*str)
  255.     {
  256.         if(* ')
  257.             a[i]=++j;
  258.         else
  259.         {
  260.             j=0;
  261.             a[++i]=0;
  262.         }
  263.         str++;
  264.     }
  265.     for (i = 0; i < 5; i++)
  266.     {
  267.         if(max<a[i])
  268.             max=a[i];
  269.     }
  270.     return max;
  271. }

  272. int word_num(char *str)
  273. {
  274.     int cnt=0,flag=1;
  275.     while(*str)
  276.     {
  277.         if((* ')&&((*(str+1)==' ')|(*(str+1)=='\0')))
  278.             cnt++;
  279.         str++;
  280.     }
  281.     return cnt;
  282. }

  283. int main(int argc, const char *argv[])
  284. {
  285.     char str[50];
  286.     char *bak=str;
  287.     printf("str=");
  288.     fgets(str,50,stdin);
  289.     str[strlen(str)-1]='\0';
  290.     printf("word_maxlengh=%d\n",word_maxlengh(str));
  291.     printf("word_num=%d\n",word_num(str));
  292.     return 0;
  293. }
  294. 8.#给定程序中,函数fun的功能是:将形参s所指的字符串中的所有字母字符顺序前移,其他字符后移,处理后新字符串的首地址作为函数值返回。例如,s所指字符串为:asd123fgh543df,处理后新字符串为:asdfghdf123543。

  295. 方法1:

  296. #include <stdio.h>
  297. #include <string.h>

  298. #define LEN 100

  299. int main(void)
  300. {
  301.     char str[LEN], tmp;
  302.     int len, i, j, end;

  303.     printf("enter a string:");
  304.     fgets(str, LEN, stdin);
  305.     len = strlen(str);

  306.     if(str[len - 1] == '\n')
  307.     {
  308.         str[len - 1] = '\0';
  309.         len--;
  310.     }

  311.     for(i = end = len - 1; i >= 0; i--)
  312.     {
  313.         if(str[i] >= '0' && str[i] <= '9')
  314.         {
  315.             tmp = str[i];
  316.             for(j = i + 1; j <= end; j++)
  317.                 str[j- 1] = str[j];
  318.             str[end--] = tmp;
  319.         }
  320.     }

  321.     printf("str:%s\n", str);
  322.     return 0;
  323. }

  324. 方法2:

  325. #include <stdio.h>
  326. #include <string.h>

  327. char *fun(char *str)
  328. {
  329.     int i,j,cnt=0;
  330.     char *bak=str,*tmp,ch;
  331.     for (i=0;i<strlen(str)-cnt; i++)
  332.     {
  333.         if(str[i]<'A'|(str[i]>'Z'&&str[i]<'a')|str[i]>'z')
  334.         {
  335.             j=i;
  336.             ch=str[i];
  337.             while(str[j+1])
  338.             {
  339.                 str[j]=str[j+1];
  340.                 j++;
  341.             }
  342.             str[j]=ch;
  343.             cnt++;
  344.             i--;
  345.         }
  346.     }
  347.     return bak;
  348. }

  349. int main(int argc, const char *argv[])
  350. {
  351.     char str[100];
  352.     printf("str=");
  353.     scanf("%s",str);
  354.     printf("new_str=%s\n",fun(str));
  355.     return 0;
  356. }
  357. 9.#给定程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。例如,形参s所指的字符串为:abcAbsmaxkess,程序执行后的输出结果为:letter 'a':3 times
  358.                       letter 's':3 times
  359. 方法1:
  360. #include <stdio.h>
  361. #include <stdlib.h>
  362. #include <ctype.h>

  363. int main(int argc, char *argv[])
  364. {
  365.     int times[26] = {0}, i = 0, max_i, j, pos, tmp;

  366.     if(argc != 2)
  367.     {
  368.         fprintf(stderr, "Usage %s!\n", argv[0]);
  369.         exit(1);
  370.     }
  371.     while(argv[1][i])
  372.     {
  373.         times[tolower(argv[1][i]) - 'a']++;
  374.         i++;
  375.     }
  376.     for(i = 0; i < 25; i++)
  377.     {
  378.         max_i= pos = i;
  379.         for(j = i + 1; j < 26; j++)
  380.         {
  381.             if(times[pos] < times[j])
  382.                 pos = max_i = j;
  383.         }
  384.         if(pos != i)
  385.         {
  386.             tmp = times[pos];
  387.             times[pos] = times[i];
  388.             times[i] = tmp;
  389.         }
  390.         if(i == 0)
  391.             printf("max:'%c' occurs %d!\n", max_i + 'a', times[0]);
  392.         else
  393.             if(times[i] == times[0])
  394.              printf("max:'%c' occurs %d!\n", max_i + 'a', times[i]);
  395.          else
  396.                 break;            
  397.     }
  398.     return 0;
  399. }

  400. 方法2:
  401. #include <stdio.h>
  402. #include <string.h>

  403. #define LEN 128
  404. void fun(char *str)
  405. {
  406.     int i,j,max=0,len;
  407.     int a[LEN]={0};
  408.     for (i =j= 0; str[i]; i++)
  409.     {
  410.         for (j=i-1; j >=0; j--)
  411.             if((str[j]==str[i])|(str[j]==str[i]+32)|(str[j]==str[i]-32))
  412.                 a[j]+=1;
  413.         if(j<0)
  414.             a[i]=1;
  415.     }
  416.     for (i = 0; i < LEN; i++)
  417.     {
  418.         if(a[max]<a[i])
  419.             max=i;
  420.     }
  421.     for (i = 0; i < LEN; i++)
  422.     {
  423.         if(a[i]==a[max])
  424.             printf("letter '%c':%d times\n",str[i],a[i]);
  425.     }

  426. }

  427. int main(int argc, const char *argv[])
  428. {
  429.     char str[100];
  430.     printf("str=");
  431.     gets(str);
  432.     fun(str);
  433.     return 0;
  434. }
  435. 10.#自己编写程序实现void itoa(int x,char *str)(将数字转换为字符串并保存到str中)
  436. #include <stdio.h>

  437. void itoa(int x,char *str)
  438. {
  439.     int cnt=0,i,bak=x,flag=0;;
  440.     while(bak/10)
  441.     {
  442.         bak/=10;
  443.         cnt++;
  444.     }
  445.     if(x<0)
  446.     {
  447.         str[0]='-';
  448.         x=-x;
  449.         flag=1;
  450.         cnt++;
  451.     }
  452.     for (i = cnt; i >=0+flag; i--)
  453.     {
  454.         str[i]=x%10+'0';
  455.         x/=10;
  456.     }
  457.     str[cnt+1]='\0';
  458. }

  459. int main(int argc, const char *argv[])
  460. {
  461.     int x;
  462.     char str[32];
  463.     printf("x=");
  464.     scanf("%d",&x);
  465.     itoa(x,str);
  466.     printf("str=%s\n",str);
  467.     return 0;
  468. }
  469. 11.#编写统计某字符串的字符长度:int my_strlen(char str[]);
  470. #include <stdio.h>

  471. int my_strlen(char str[])
  472. {
  473.     int cnt=0;
  474.     while(*str)
  475.     {
  476.         cnt++;
  477.         str++;
  478.     }
  479.     return cnt;
  480. }

  481. int main(int argc, const char *argv[])
  482. {
  483.     char str[32];
  484.     printf("str=");
  485.     gets(str);
  486.     printf("my_strlen(str)=%d\n",my_strlen(str));
  487.     return 0;
  488. }
  489. 12.#用循环结构将一个字符数组里的值复制到另外一个字符数组里(main函数里实现)
  490.     1)练习使用strcpy函数
  491.     2)将上题设计思想整理成my_strcpy函数,并在main函数里调用、测试。
  492.     3)部分复制,例如从第3个字符开始复制
  493. #include <stdio.h>

  494. char *my_strcpy(char *dest,char *src)
  495. {
  496.     char *bak=dest;
  497.     while(*src)
  498.         *dest++=*src++;
  499.     *dest='\0';
  500.     return bak;
  501. }

  502. int main(int argc, const char *argv[])
  503. {
  504.     char dest[100]="hello world";
  505.     char src[32]="hello";
  506.     puts(my_strcpy(dest,src));
  507.     return 0;
  508. }

阅读(908) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~