\
接上篇博客——C语言编程笔试题(二)
文章目录
一、倒置字符串
\
题目描述
将一句话的单词进行倒置,标点不倒置。
输入描述
I like beijing.
输出描述
beijing.like I
\
1.思考步骤
1.输入原字符串,在这里我们要用gets函数,不能用scanf函数,因为scanf在读取到空格时就会停止。
2.处理原字符串
(1)字符串整体倒置
(2)单词字符串分别倒置
3.打印改变后的字符串
\
2.实现代码
\
void reverse(char *left, char *right)
{
char tmp = 0;
while (left < right)
{
tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
//原字符串
char arr[100] = { 0 };
gets(arr);
//处理字符串
int len=strlen(arr);
//字符串整体倒置
reverse(arr,arr+len-1);
//单词分别倒置
char *start = arr;
char *end = arr;
while (*end)
{
end = start;
while (*end != ' ' && *end != '\0')
{
end++;
}
reverse(start, end - 1);
if (*end == ' ')
{
start = end + 1;
}
else
{
start = end;
}
}
//处理过的字符串
printf("%s\n", arr);
return 0;
}
实现效果
\
二、模拟实现atoi函数
1.atoi函数的介绍
atoi函数的功能: 将字符串转换成整型数字
例如
输入
字符串 “-1234” ------%s
输出
整形 "-1234 " -----%d
\
2.思考步骤
\
首先可以转换成整形的字符串的字符必然是‘+‘ ’-‘或者数字符号
我们要对其他类型的字符进行排除
如果不是数字符号或+ - 则为非法字符
(1) 空指针类型
(2)空字符串
(3)处理空格 (利用isspace函数判断)
(4)判断正负号
(5)判断数字符号(利用isdigit函数判断)
(6)对数字符号进行运算,得到整形数字
(7)打印结果
注意: isspace isdigit 字符判断函数要引头文件<stype.h>
\
3.实现代码
\
#include <stdio.h>
#include <ctype.h>
enum State
{
VALIDE,
INVALIDE
};
enum State state = VALIDE;
int my_atio(char * str)
{
//处理空指针类型
if (str == NULL)
return 0;
//处理空字符串
else if (*str == '\0')
return 0;
//处理空格
while (isspace(*str))
{
str++;
}
//判断正负号
int flag = 0;
if (*str == '+')
{
flag = 1;
str++;
}
else if (*str == '-')
{
flag = -1;
str++;
}
//判断数字字符
long long num = 0;
while (*str!='\0')
{
if (isdigit(*str))
{
num = num * 10 + flag*(*str-'0');
}
else
{
return 0;
}
str++;
}
state = INVALIDE;
return (int)num;
}
int main()
{
char arr[] = "-45748";
int ret = my_atio(arr);
if (ret == 0)
{
printf("非法的:%d\n", ret);
}
else
{
printf("合法的:%d\n", ret);
}
return 0;
}
\
实现效果
\
好的,今天的题目就分享到这里,谢谢大家的欣赏与关注!!!
\