叶圣民//2018.07.19.//C语言字符串和数组的练习

 Training4:字符串训练

  1. 题目: 请编写一个C函数,该函数将一个字符串逆序 

  2. 题目: 请编写一个C函数,该函数可以实现将一个整数转为字符串输出

  3. 题目: 请编写一个C函数,该函数可以实现将一个数字字符串转为十进制数字输出

  4. 题目: 编写一个C函数,将I am from shanghai 倒置为shanghai from am I,将句子中的单词位置倒置,而不改变单词内部结构.

第一题、

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

#define MAX_LEN sizeof(char) * 1000    //宏定义MAX_LEN 指针的最大空间


char * reverse_string(char *str)    //定义倒序字符串函数,返回值为char * 类型
{
    int len = 0;
    char *result = (char *)malloc(MAX_LEN);
    char *result_temp = result;

    len = strlen(str);    //计算出字符的字节长度
    
    *(result_temp + len) = '\0';    //result_temp 赋值后的最后一位给停止符
    while(*str != '\0')    //遍历字符串
    {
        *(result_temp + len - 1) = *str;    //把str 的一个数字字符给result_temp的倒数第2个字符保存
	result_temp--;
	str++;
    }
    
    return result;
}



int main()
{
    char *str = (char *)malloc(MAX_LEN);
    

    printf("/***字符串逆序***/\n");
    printf("请输入字符串: ");
    scanf("%[^\n]",str);

    char *result = reverse_string(str);

    printf("字符串逆序为: %s\n",result);
    
    return 0;
}


第二题、

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

#define MAX_LEN sizeof(char) * 1000     //宏定义MAX_LEN为最大空间

char * reverse_string(char *str);    //声明倒序字符串函数
char * int_turn_char(int number);    //声明整型转化字符型数字串的函数

char * reverse_string(char *str)     //定义倒序字符串函数
{
    int len = 0;
    char *result = (char *)malloc(MAX_LEN);
    char *result_temp = result;
    len = strlen(str);
    *(result_temp + len) = '\0';
    while(*str != '\0')
    {
        *(result_temp + len - 1) = *str;
        result_temp--;
        str++;
    }
    return result;
}


char * int_turn_char(int number)    //定义整型转化字符型数字串的函数
{
    
    char * str = (char *)malloc(MAX_LEN);
    char * str_tmp = str;

    while(number != 0)    //number / 10 取整不为 0 则把number赋值给指针str_tmp
    {
        *str_tmp = number % 10 + '0';    //整型转字符型,0 的ASCLL码是48
	number = number / 10;
        str_tmp++;
    }
    *str_tmp = '\0';

    return str;
}


int main()
{
    int number;

    printf("/***整型数字转化为字符数字***/\n");
    printf("请输入数字(int):    ");
    scanf("%d",&number);

    char *result = int_turn_char(number);
    char *out = reverse_string(result);

    printf("转化后的字符数字(char):%s\n",out);
    
    
    return 0;

}



第三题、

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

#define MAX_LEN sizeof(char)*1000    //宏定义MAX_LEN 为指针最大空间
#define MAX 100     //MAX 数组最大空间



int char_turn_int(char number)      //把字符数字转化为整型数字
{
    int a;
    
    a = number - 48;    //字符 0 的ASCLL 码是48
    return a;

}


int main()
{   
    int num = 0;
    char *number = (char *)malloc(MAX_LEN);

    printf("/***整型字符转化为整数型输出***/\n");
    printf("请输入数字(char) : ");
    scanf("%s",number);
    printf("输入的每个字符字节大小 %d\n",sizeof(*number));

    printf("转化后输出(int):");
    while(*number != '\0')        //遍历字符传 number 依次调用函数转化字符数字
    {
        num = char_turn_int(*number);
	printf("%d",num);
	number++;
    }
    printf("\n");
    printf("输出的每个整型数字的字节大小 %d\n",sizeof(num));

    printf("\n");
    return 0;
}


第四题、

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

#define MAX sizeof(char) * 1000    //宏定义MAX 数组的最大字节空间

char * reserve_string(char *str,int len)    //给入实参字符串,给出字符串长度
{                                           //用数组元素左移实现字符串的倒序
   
    int i = 0;
    int j = 0;
    char temp = 0;
    int m = len - 1;
    for(i = 0;i < m;i++)     //for循环实现数组左移
    {
        len--;
        for(j = 0;j < len;j++)
        {
            temp = str[j];
	    str[j] = str[j + 1];
	    str[j + 1] = temp;
        }
    //    printf("%s\n",str);
    }

}
char * reserve_word(char *str)    //字符所有元素实现倒序之后,再逐个倒序,就会变成正确的单词
{
    int n = 0;
    while(1)
    {
       if((*str) == 32 || (*str) == '\0')    //如果遇到空格或者结束符就是遍历到了一个单词,将该单词(倒序的)再倒序回来
       {                                     //空格的ASCLL码是32
          reserve_string(str - n,n);     //数组指针移到该单词的初始地址
	   n = -1;
	 
       }
       if(*str == '\0')
       {
          break; 
       }
       n++;
       str++;
    }

}
int main()
{
    char str[MAX];//="I am from shanghai";
    int len ;
    printf("/***语句单词的倒序***/\n");
    printf("请输入语句:\n");
    scanf("%[^\n]",str);

    len = strlen(str);
    reserve_string(str,len);
    reserve_word(str);

    printf("倒序后的语句:\n");
    printf("%s\n",str);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_31421117/article/details/81121807