在字符串中添加内容
1.gets字符串,用双重循环,外循环找要加内容的位置,内循环从尾到头遍历字符串
//在每三位上加一个逗号,i找第三位,j从尾到头遍历字符串,当相等时可加
for (int i = n - 3; i > 0; i -= 3)//i=6
{
int j = n;//j=9;
for (j; j >= i; j--)
{
p[j + 1] = p[j];//
if (j == i)
{
p[j] = ',';
n++;
//只要定义字符串时留足空间,相当于一点一点写,不会占了原来位置
}
}
}
##如果题目给出了字符串结尾标志
如给出0的时候作为结尾,则要加一句这样的break
//输入以字符0结束
if(s[i]=='A'){a++;}
else if(s[i]=='B'){b++;}
else if(s[i]=='0'){break;}
提取字符串内容输出
不需在新建一个字符串,只需将对应位置print出来即可
单词缩写思路:1.监测首位是否为大写
2.监测s[i]上是否为空格,若为空格则print下一位s[i+1]
不定位比大小
A,B,C中要任两个相同,可以用或运算
A==B||B==C||A==C
判断素数
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
bool IsPrime(int n)
{
int i;
for(i = 2; i <= sqrt(n); i++)
{
if(n%i == 0)
return 0;
}
return 1;
}
int main(void)
{
int i = 0;
for(i = 101; i <= 200; i++)
{
if(IsPrime(i)==1)
{
printf("%d ",i);
}
}
return 0;
}
1.在自定义函数中不使用实际参数,实际参数在main中传过去
2.主函数中用i遍历每一个数,在对i使用isprime函数
斐波那契数列
#include<stdio.h>
int fibonaci(int i)
{
if(i == 0)
{
return 0;
}
if(i == 1)
{
return 1;
}
return fibonaci(i-1) + fibonaci(i-2);
}
int main()
{
int i;
printf("month\tnumber\n");
for (i = 1; i < 41; i++)
{
printf("%d\t%d\n", i,fibonaci(i));
}
return 0;
}
函数递归 字符串逆序
1.注意函数中要传一个数组或字符串,只需传他的首地址即可
2.函数递归中不用for循环,而是通过递归这个函数一次次的进行操作
#include <stdio.h>
#include <string.h>
void reverse_string(char *str, int start, int end) {
if (start >= end) {
return;
}
char temp = str[start];
str[start] = str[end];
str[end] = temp;
reverse_string(str, start + 1, end - 1);
}
int main() {
char str[] = "Hello, World!";
int len = strlen(str);
reverse_string(str, 0, len - 1);//这样传值可以不用在函数中赋值,直接考虑数字方面的问题而不是指针
printf("逆序输出的字符串为: %s
", str);
return 0;
}
水仙花数
1.考察提取每一位
#include<stdio.h>
int main()
{
int a,b,c,d,e;
for(int i=0;i<=999;++i)
{
a=i%10;//个位
b=i/10%10//十位
c=i/100%10//百位
if(i==a*a*a+b*b*b+c*c*c){printf("%d",i);}
}
return 0;
}
交换字符串
void swap(char*str1,char*str2)
{
char tem[20];
strcpy(tem,str1);
strcpy(str1,str2);
strcpy(str2,tem);
}//注意交换的是地址,要不不会生效
计算字串次数,匹配子串
for(i=0;T[i]<=strlen(T);i++)//外循环遍历母字符串
{
for(j=0,k=i;P[j]==T[k];j++,k++)//在母字符串i的位置开始比较,循环条件是对应位上相等
if(j==strlen(P))count++;//如果循环满了子串,则大功告成 count+1
}
return 0;
数组依次向后一位
for(i=0;i<10;i++)
{
if(a[i]>number)//按次序插入新输入的数字
{
temp1=a[i];//把被占的数字记在t1里
a[i]=number;
for(j=i+1;j<11;j++)
{
temp2=a[j];//从占位下一位开始,将j位上的存在t2
a[j]=temp1;
temp1=temp2;
}
break;
}
}
switch case写法
switch(c)
{
case 'a':
break;
case 'b':
break;
}
## 辗转相除的递归函数
int gcd(int a,int b)
{
if (b=0)
{return a;}
return gcd (b,a%b);
}