字符串学习
字符串的转置
利用‘\0‘检测是否到字符串结尾的方法来计算字符串长度;
不使用strlen()函数,使用strlen()函数要引用头文件#include<string.h>
#include <stdio.h>
void swap(char *x)
{
//计算字符串长度;
int n=0,i;
char tmp;
while(x[n] !='\0')
{
n++;
}
for(i=0;i<n/2;i++)
{
tmp = x[i];
x[i] = x[n-1-i];
x[n-1-i] = tmp;
}
}
int main()
{
char a[30];
gets(a);
swap(a);
puts(a);
}
字符串复制,不使用strlen()函数
注意:i<n ;并没有把’\0‘结束符复制过去,所以要给x 最后添加结束符。否则输出会乱码
#include <stdio.h>
void copy(char *x,char *y)
{
//计算y 字符串的长度;
int n=0,i;
while(y[n] !='\0')
{
n++;
}
for(i=0;i<n;i++)//i<n 复制没有复制'\0'结束符
{
x[i] = y[i];
}
x[i] = '\0';
}
int main()
{
char a[30];
char b[30];
gets(b);
copy(a,b);
puts(a);
}
输出数组中的最大值和最大值角标
//求数组的最大值,并且输出角标,两种方法;
#include <stdio.h>
int maxfun(int *x,int n)
{
int max,i;
int c;
max = x[0];
for(i=0;i<n;i++)
{
if(max<x[i])
{
max = x[i];
c = i;
}
}
return c;
}
int main()
{
int a[10]={0,1,2,3,4,5,6,7,18,11};
int f;
f = maxfun(a,10);
printf("最大值:%d 最大值角标 %d\n",a[f],f);
}
冒泡排序法
//冒泡排序法
#include <stdio.h>
int main()
{
int a[10]={0,19,21,3,4,5,6,7,18,11};
int i,k;
int tmp;
for(i=0;i<10-1;i++)
for(k=0;k<10-1-i;k++)
{
if(a[k]>a[k+1])
{
tmp = a[k];
a[k] = a[k+1];
a[k+1] = tmp;
}
}
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
}
i–与--i;的区别与计算。
a=i++;是先把i的值赋值给a,r然后i++;
溢出问题:
使用移位来完成2的幂运算
#include <stdio.h>
/*学习移位运算*/
typedef unsigned long long ull;
const ull MAX = (((int)1)<<62);
int main()
{
//int a;
//a = (((int)1) << 10); // 把1向左移动10位,相当于2的十次方;
//printf("%d\n",a);
int t;
ull a, b, c, d;
scanf_s("%d",&t);
while (t--)
{
scanf_s("%ull %ull %ull %ull", &a, &b, &c, &d);
if (a == MAX && b == MAX && c == MAX && d == MAX)
{
printf("数据溢出");
}
else
{
printf("%llu\n", a + b + c + d);
}
}
}