Training4:字符串训练
-
题目: 请编写一个C函数,该函数将一个字符串逆序
-
题目: 请编写一个C函数,该函数可以实现将一个整数转为字符串输出
-
题目: 请编写一个C函数,该函数可以实现将一个数字字符串转为十进制数字输出
-
题目: 编写一个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;
}