//编写函数,去掉一个字符串中除头部和尾部空格外的所有空格,
//并编写主函数进行调用测试。
//
//输入:
//
//占一行(注:输入的字符串长度不会超过80)
//
//输出:
//
//占一行
//
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<string.h>
void cut(char* string,int len)
{
int begin=0,count=0;
char stringcut[80] = { '\0'};
for (int i = 0; i < len; i++)
{
if (string[i] != ' ') begin = 1;
if (string[i] == ' ' && begin == 1)continue;
stringcut[count] = string[i];
count++;
}
_strrev(string);
for (int j = 0; string[j] == ' '; j++)
{
stringcut[count] = ' ';
count++;
}
printf("%s", stringcut);
}
int main()
{
char string[80];
gets(string);
int len = strlen(string);
cut(string, len);
return 0;
}
//传数组指针的时候注意类型!,这里是字符串数组类型为char非int!
//要验证数组最后的空格有没有删去,可以翻转再输出
//"写出正整数的三位分节格式。如,
//当用户输入82668634时,程序应该输出82,668,634。
//
//输入:正整数
//
//输出:三位分解格式。
//
//样例:
//
//82668634
//
//82, 668, 634
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<string.h>
void divide(int n)
{
int count = 0,temp=0;
char div[20]={'\0'};
while (n)
{
div[count] = n % 10 + '0';
if (temp == 2&& n / 10 != 0)
{
count++;
div[count] = ',';
temp = 0;
}
else temp++;
n /= 10;
count++;
}
printf("%s", _strrev(div));
}
int main()
{
int n;
scanf("%d", &n);
divide(n);
return 0;
}
//从个位开始取,最后利用strrev翻转字符串
//注意divide函数中当取到首位时后面不用再加逗号,因此要加一个验证条件n/10!=0
//当对字符串数组一个个赋值时,必须要初始化'\0'否则scanf无法正确输出!(当然用for就没问题)
//整形和字符运算后为整形,然后赋值给char类型,他是会自动转换的
//将字符串中奇数下标(从0开始)的字符顺序颠倒。如字符12345678,结果为18365472
//输入:字符串,不含空格。
//输出:结果字符串。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<string.h>
void strreverse(char* string,int len)
{
int count = 1, j = 0;
char stringrev[20] = { '\0' };
if (len % 2 == 0)
{
for (int i = len - 1; i > 0 ; i -= 2,j += 2)
{
stringrev[count - 1] = string[j];
stringrev[count] = string[i];
count+=2;
}
}
else
{
for (int i = len - 2; i > 0; i -= 2,j += 2)
{
stringrev[count - 1] = string[j];
stringrev[count] = string[i];
count += 2;
}
stringrev[count-1] = string[j];
}
printf("%s", stringrev);
}
int main()
{
char string[20];
scanf("%s", string);
int len = strlen(string);
strreverse(string, len);
return 0;
}
//先判断个数奇偶
//同时将颠倒的和正常的赋值给新建数组(新建数组要初始化)
//若为奇数,还需多将数组赋值一次
//输入一个长度不超过 100 的字符串,
// 删除串中的重复字符。
//
//输入:
//
//输入要检查的字符串,长度不超过100个字符
// 。例如:abacaeedabcdcd。
//
//输出:
//
//删除重复字符后的字符串。例如:abced。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<string.h>
void strdel(char* string,int len)
{
int count = 0;
for (int i = 0; i < len; i++)
{
count = 0;
for (int j = i-1; j >= 0; j--)
{
if (string[i] == string[j])
{
count = 1;
break;
}
}
if (count == 1)continue;
else printf("%c", string[i]);
}
}
int main()
{
char string[100];
gets(string);
int len = strlen(string);
strdel(string, len);
return 0;
}
//每遍历到一个字符都与前面的比较,若相同则遍历下一个
//编写程序,输入字符串到字符数组s中,再输入一个字符给变量c,判断s中是否有c,若有则将该字符从s
//中删除后输出。若没有,则输出字符串“NotFound”。
//输入2行,1个字符串和1个字符:
//输出:删除后的字符串
//样例1:
//输入:
//smiles
//s
//输出:
//mile
//样例2:
//输入:
//smiles
//a
//输出:
//NotFound
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<string.h>
void strfound(char* string,int len,char c)
{
char str[30] = { '\0' };
int count = 0, temp = 0;
for (int i = 0; i < len; i++)
{
if (string[i] == c) count = 1;
else
{
str[temp] = string[i];
temp++;
}
}
if (count == 0)printf("NotFound");
else printf("%s", str);
}
int main()
{
char string[100],c;
gets(string);
scanf("%c", &c);
int len = strlen(string);
strfound(string,len,c);
return 0;
}
//新建数组存放其他元素,当找到c后不存放进去,并用count记录
//"输入两个字符串,统计第2个字符串
// (至少含2字符)
// 在第1个字符串中出现的次数。
// 没有出现,次数为0.
//
//输入:两个字符串,以空格分隔。
//
//输出:出现次数,整数。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<string.h>
int strfound(char* string,int len,char* target,int len2)
{
int temp = 0;
for (int i = 0; i < len; i++)
{
if (string[i] == target[0])
{
int count = 0;
for (int j = 0,m = i; j < len2; j++,m++)
{
if (string[m] == target[j])count++;
}
if (count == len2)temp++;
}
}
printf("%d", temp);
}
int main()
{
char string[40],target[10];
scanf("%s", string);
scanf("%s", target);
int len = strlen(string);
int len2 = strlen(target);
strfound(string,len,target,len2);
return 0;
}
//当第一数组某一元素与第二数组首元素相同时,遍历第二数组进行查找
//注意查找完后仍是从第一数组下一个开始遍历(保证重复的也要算进去)
//可以使用strstr函数
//"输入字符串,字符串中有若干星号*,
// 去掉字符串首尾的星号(*),
// 保留中间的星号。 字符串长度不大于200.
//
//输入:带有 * 号的字符串。
//
//输出:首尾不带 * 号的字符串。
//
//样例:
//
//* **street * *music * ***
//
//street * *music
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<string.h>
void strdel(char* string,int len)
{
int i = 0,j,m=len-1;
while (string[i] == '*')i++;
while (string[m] == '*')m--;
for (j = i; j < len; j++)
{
string[j - i] = string[j];
}
string[m - i + 1] = '\0';
printf("%s", string);
}
int main()
{
char string[200];
gets(string);
int len = strlen(string);
strdel(string,len);
return 0;
}
//利用两次while循环找到首部星号个数i,和把m定位到最后一个非星号元素
//然后所有元素都向前移动i位,然后利用定位的m找到前移后最后一个非星号元素
//(错误)注意若前移后再定位的话令string[m+1]='\0'即可,因为后面的星号也前移了
//上面这种定位方法还是有问题,当最后面没有星号的时候,就失效了
//所谓孪生素数是指间隔为 2 的相邻素数,
// 例如最小的孪生素数是3和5, 5和7也是孪生数。
//
//编写程序,求给定区间[m, n]中的孪生数的数量
// 。例如[2, 10]中的孪生数有(3, 5)和(5, 7),
// 则[2, 10]中孪生数的数量为2.
//
//输入:正整数m, n, m, n > 1.
//
//输出:[m, n]中的孪生的数量
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<string.h>
int findpris(int m,int n)
{
int count = 0;
for (int i = m; i <= n - 2; i++)
{
int j = i + 2;
if (find(i) + find(j) == 0)count++;
}
return count;
}
int find(int x)
{
for (int i = 2; i <= x - 1; i++)
{
if (x % i == 0) return 1;
}
return 0;
}
int main()
{
int m, n;
scanf("%d%d", &m, &n);
printf("%d",findpris(m, n));
return 0;
}
//利用find函数找素数
//利用findpris函数找相邻的素数
//注意i的范围要小于n-2 因为i还要+2
//从键盘输入一个32位的二进制形式的IP地址,
// 将其转换为点分十进制的表示,
// 如果输入的字符串中含有1和0以外的字符,
// 则输出“该字符串不是正确的IP地址”。
//
//输入:0、1二进制序列,不会超过32位,
// 位数不足时程序自动在前面补0.
//
//输出:点分IP地址。
//
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<string.h>
#define base 2
int jugde(char* ip,int len)
{
for (int i = 0; i < len; i++)
{
if (ip[i] != '0' && ip[i] != '1') return 0;
}
return 1;
}
void zeroChange(char* ip, int len)
{
if (len != 32)
{
for (int i = len - 1; i >= 0; i--)
{
ip[i + 32 - len] = ip[i];
}
for (int i = 0; i < 32 - len; i++)
{
ip[i] = '0';
}
}
}
void pointChange(char* ip, int len)
{
int sum = 0,flag = 0;
if (jugde(ip, len) == 0)printf("该字符串不是正确的IP地址");
else
{
zeroChange(ip, len);
for (int i = 0; i < 32; i++)
{
sum = base * sum + ip[i] - '0';
if (i % 8 == 7)
{
flag == 0 ? printf("%d", sum) : printf(".%d", sum);
flag++;
sum = 0;
}
}
}
}
int main()
{
char str_ip[33] = { '\0' };
scanf("%s", str_ip);
int len = strlen(str_ip);
pointChange(str_ip,len);
return 0;
}
//这里编写了三个函数和一个宏,judge函数判断是否合法,zeroChange用于补0,pointChange用于点分转换
//judge判断不合法时返回0,zeroChange先后移缺少的位数,再补0,ip数组必须初始化'\0'否则后移后没有终止符
//点分转换时,类比十进制相加,进行转换(关键),当遍历到某些位数时就输出,并将sum置0
//在医院打点滴(吊针)的时候,如果滴起来有规律,
// 先是滴一滴,停一下;然后滴二滴,停一下;
// 再滴三滴,停一下...,现在有一个问题:
// 这瓶盐水一共有v毫升,每一滴是d毫升,
// 每一滴的速度是一秒(假设最后一滴不到d毫升
// ,则花费的时间也算一秒),停一下的时间也是一秒
// ,这瓶水什么时候能滴完呢?(0 < d < v < 6000)
// 输入:一滴是多少毫升和一瓶盐水有多少毫升,
// 中间用空格隔开.
// 输出:滴完需要多少时间.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<string.h>
#define Stay 1
int main()
{
int time=0;
double d,v;
scanf("%lf %lf", &d, &v);
for (int i = 1;; i++)
{
if (d * i < v)
{
time += i * 1 + Stay;
v -= d * i;
}
else if (d * i == v)
{
time += i * 1;
break;
}
else
{
if (v == 0)break;
else
{
time += ceil(v / d) * 1;
break;
}
}
}
printf("%d", time);
return 0;
}
//fmod为浮点数取模(求余),ceil为向上取整,floor向下取整,针对浮点数进行
//注意当刚好滴完时没有停留时间,因此d * i == v单独算一种情况