一波C语言字符数组实用技巧集锦

字符数组倒序

#include <stdio.h> 

 void daoxu(char str[]){
   int i;
   char temp;
   for(i = 0; i < strlen(str) / 2 ; i ++){
     temp = str[i];
     str[i] = str[strlen(str) - i-1];
     str[strlen(str) - i-1] = temp;
   }
 }

单词计数   

 int wordCount(char str[]){
   int i;
   int count = 0;
   int word = 0;
   for (i = 0 ; str[i] != '\0' ; i ++)
   {
     if (str[i] == ' ')
     {
       word = 0;
     }else if (word == 0)
     {
       word = 1;
       count ++;
     }
   }
   return count;
 }

字符大写转小写

 void mylwr(char str[]){
   int i;
   for (i = 0 ; str[i] != '\0' ; i ++)
   {
     if (str[i] >= 'A' && str[i] <= 'Z')
     {
       str[i] += 'a' - 'A';
     }
   }
 } 

字符小写转大写

 void myupr(char str[]){
   int i;
   for (i = 0 ; str[i] != '\0' ; i ++)
   {
     if (str[i] >= 'a' && str[i] <= 'z')
     {
       str[i] -= 'a' - 'A';
     }
   }
 }

字符数组计算字符串长度   

 int mylen(char str[]){
   int len;
   for (len = 0 ; str[len] != '\0' ; len ++);
   return len;
 }

字符串连接 

 void mycat(char str1[],char str2[]){
   int i,j;
   for (i = 0 ; str1[i] != '\0' ;i++);
   for (j = 0 ; str2[j] != '\0' ; j ++)
   {
     str1[i + j] = str2[j];
   }
   str1[i + j] = '\0';
 }

指定长度串接 

void myncat(char str1[],char str2[], int len){
   int i,j;
   for(i = 0; str1[i] != '\0'; i++);
   for (j = 0; j < len; j++)
   {
     str1[i + j] = str2[j];
   }
   str1[i + j] = '\0';
 }

字符数组拷贝     

 void mycpy(char dst[],char src[]){
   int i = 0;
   do
   {
     dst[i] = src[i];
   } while (src[i++] != '\0');
 }

字符数组指定长度拷贝     

 void myncpy(char dst[],char src[], int len){
   int i;
   for (i = 0; i < len; i++)
   {
     dst[i] = src[i];
   }
   dst[i] = '\0';
 }

找出句子中最长的单词 

 void longest(char dst[],char src[]){
   int i = 0,j;
   int count =0;
   int max = -1;
   do
   {
     if (src[i] ==' ' || src[i] == '\0')
     {
       if (count > max)
       {
         max = count;
         for (j = 0; j < count; j++)
         {
           dst[j] = src[i - count + j];
         }
         dst[j] = '\0';
       }
       count = 0;
     }else{
       count++;
     }
   } while (src[i++] != '\0');
 }

从字符串中提取整形数字

#include <stdio.h> 

int getint(char str[], int a[]){//从字符串中提取数字并放在数组中
  int i = 0;
  int w = 0;
  int c = 0;
  int j, k;
  do
  {
    if (str[i] > '0' && str[i] <= '9')
    {
      w++;
    }else if (w)
    {
      j = 0;
      for (k = w; k > 0; k--)
      {
        j *= 10;
        j += str[i - k] - '0';
      }
      w = 0;
      a[c] = j;
      c++;
    }
  } while (str[i++] != '\0');
  return c;
} 

void main(){
  char str[100];
  int a[100];
  int i, j;
  gets(str);
  i = getint(str,a);
  for (j = 0; j < i; j++)
  {
    printf("%d ",a[j]);
  }
}

整形、字符数组型转换

#include <stdio.h>
#include <stdlib.h> 

int sumof1(int x)//求一个数转换成二进制以后1的个数
{
  int countx = 0;
  while(x)
  {
    countx ++;
    x &= x-1; //每位与一次x - 1;就能消掉最后一个1
  }
  return countx;
} 

void main(){ 

  char c[10];
  int i = 999; 

  itoa(i, c, 10);//以10进制转换成字符数组
  puts(c); 

  itoa(i, c, 16);//以16进制转换成字符数组
  printf("0x%s\n", c); 

  itoa(i, c, 8);//以8进制转换成字符数组
  printf("0%s\n", c); 

  itoa(i, c, 2);//以2进制转换成字符数组
  puts(c); 

  i = atoi(c);//再将字符串转成整形
  printf("%d\n", i); 

  printf("%d\n", sumof1(i));//以2进制表示时1的个数
}

(0)

相关推荐

  • C语言 数组指针详解及示例代码

    数组(Array)是一系列具有相同类型的数据的集合,每一份数据叫做一个数组元素(Element).数组中的所有元素在内存中是连续排列的,整个数组占用的是一块内存.以int arr[] = { 99, 15, 100, 888, 252 };为例,该数组在内存中的分布如下图所示: 定义数组时,要给出数组名和数组长度,数组名可以认为是一个指针,它指向数组的第 0 个元素.在C语言中,我们将第 0 个元素的地址称为数组的首地址.以上面的数组为例,下图是 arr 的指向: 下面的例子演示了如何以指针的方

  • C语言一维数组初步学习笔记

    数组 可以存储一组或者多组数值的变量,里面包含多个元素,数组的每个成员都是一个数组元素. 一维数组 定义:类型 数组名[常量表达式] = {值1, 值2, 值3-}; int a[3] = {0, 1, 2}; float f[2] = {1.2, 2.3, 3.14}; char str[] = {'h', 'e', 'l', 'l', 'o'}; chat str1 = "iPhone";//这也是定义字符数组的方法,字符数组后面会详细讲解,这里先了解一下 当数组元素个数为变量时,

  • C语言找出数组中的特定元素的算法解析

    问题描述:一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它.能否只用一个额外数组和少量其它空间实现.       思路:如果能用两个辅助数组,那么相对来说简单一点,可定义数组Min和数组Max,其中Min[i]表示自a[i]之后的最小值(包括a[i]),Max[i]表示自a[i]之前元素的最大值.有了这两个辅助数组后,对于a[i],如果它大于Max[i-1]并且小于Min[i+1],那么就符合要求.       但是题目要求是只用一个

  • C语言将数组中元素的数排序输出的相关问题解决

    问题描述:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个.例如输入数组{32,  321},则输出这两个能排成的最小数字32132.请给出解决问题的算法,并证明该算法.       思路:先将整数数组转为字符串数组,然后字符串数组进行排序,最后依次输出字符串数组即可.这里注意的是字符串的比较函数需要重新定义,不是比较a和b,而是比较ab与 ba.如果ab < ba,则a < b:如果ab > ba,则a > b:如果ab = ba,则a = b.比较

  • 使用C语言实现vector动态数组的实例分享

    下面是做项目时实现的一个动态数组,先后加入了好几个之后的项目,下面晒下代码. 头文件: # ifndef __CVECTOR_H__ # define __CVECTOR_H__ # define MIN_LEN 256 # define CVEFAILED -1 # define CVESUCCESS 0 # define CVEPUSHBACK 1 # define CVEPOPBACK 2 # define CVEINSERT 3 # define CVERM 4 # define EXP

  • C语言中二维数组指针的简要说明

    C语言中,指针是一个复杂但又灵活多变的知识点,我们知道,在一维数组中,对于一个数组a[],*a,a,&a,都表示a的首地址,但如果与二维数组混合使用,就显得更为复杂了.例如对于一个二维数组 a[2][4]={{1,2.3},{4,5,6}} a+i,&a[i],*(a+i),a[i], 这四个表达式到底表示什么呢? 先告诉答案吧,其实这几个表达式都是指向同一个地址的,也许你会很诧异,也会很疑惑,怎么会是这样呢!!事实证明就是这样的, C语言中,指针是一个复杂但又灵活多变的知识点,我们知道,

  • 直观理解C语言中指向一位数组与二维数组的指针

    一维数组和指针: 对于一位数组和指针是很好理解的: 一维数组名: 对于这样的一维数组:int a[5];  a作为数组名就是我们数组的首地址, a是一个地址常量 . 首先说说常量和变量的关系, 对于变量来说, 用箱子去比喻再好不过了, 声明一个变量就声明一个箱子,比如我们开辟出一个苹果类型的箱子, 给这个变量赋值就是把盛放苹果的箱子中放入一个实实在在的苹果, 这就是变量的赋值.  而对于数组来说, 就是一组类型相同的箱子中,一组苹果箱子, 可以放入不同的苹果. 一维数组空间: 变量被声明后, 我

  • 简单分析C语言中指针数组与数组指针的区别

    首先来分别看一下,指针数组的一个小例子: #include <stdio.h> #include <string.h> int lookup_keyword(const char*key, const char* table[], const int size) { int ret = -1; int i = 0; for(i=0; i<size; i++) { if (strcmp(key, table[i]) == 0) { ret = i; break; } } ret

  • C语言中数组作为函数的参数以及返回值的使用简单入门

    函数通过数组作为参数 如果想通过一个一维数组作为函数的参数,就必须声明函数形式参数,使用以下三种方式与所有三个声明方法之一产生类似的结果,因为每一种方式告诉编译器,一个整数指针将会要被接收.类似的方式,可以使用多维数组形式参数. 方式-1 形式参数为指针如下.在下一章将学习什么是指针. void myFunction(int *param) { . . . } 方式-2 如下形式数组参数的大小: void myFunction(int param[10]) { . . . } 方式-3 如下形式

  • C语言数组指针的小例子

    1.功能:输入6个学生的5门课程成绩,计算出每个学生的平均分和每门课程的平均分.2.C语言实现代码:(其实就是用二维数组来实现的,二维数组的引用传递使用数组指针来完成) 复制代码 代码如下: #include <stdio.h>#define STUDENT 5#define SCORE 6void input_array(float (*score)[STUDENT]);void avg_score(float (*score)[STUDENT]);void avg_course(float

  • C语言中交换int型变量的值及转换为字符数组的方法

    不使用其他变量交换两个整型的值: #include <stdio.h> void main(){ int a = 3; int b = 4; a = a ^ b;//使用异或交换 b = b ^ a; a = a ^ b; printf("%d, %d\n", a, b); a = a - b;//使用加减交换 b = a + b; a = b - a; printf("%d, %d\n", a, b); a ^= b ^= a ^= b; printf

随机推荐