0.
strncmp函数:
int strncmp(const char *str1, const char *str2, size_t n)
比较str1和str2进行比较,最多比较前n个字符
Strncat函数:
char *strncat(char *dest, const char *src, size_t n)
把src字符串连接到dest字符串的尾部,长度为n
Strncpy函数:
char *strncpy(char *dest, const char *src, size_t n)
把src字符串复制到dest字符串,复制n个字符,当src长度小于dest时,用空字符填充剩余部分
如图输入的src为12,小于dest的长度,用空字符填充了dest的剩余部分,由sizeof得出复制后的dest占8个字节,由此可见dest字符串已被空字符填充。
1.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char a[100]="";
int i,j=0;
gets(a);
for(i=0;a[i]!='\0';i++) //遍历字符串直到'\0'
{
if(a[i]==' ') //其中有字符为' '时,删除空格
{
for(j=i;a[j]!='\0';j++)
{
a[j]=a[j+1];
}
i--;
}
else //当不是空格时,i往后跳一位
i++;
}
puts(a);
return 0;
}
2.
//输入一个字符串,实现单词的逆置
char a[100]="";
gets(a); //存放字符串
int i=0;
int j = strlen(a)-1;
char t;
while(i<j)
{
t=a[i];
a[i]=a[j]; //整体转置
a[j]=t;
i++;
j--;
}
int l,k; //单词起始位置和结束位置
i=j=k=l=0;
for(i=0;a[i]!='\0';)
{
if(a[i]!=' '&&(a[i+1]==' '||a[i+1]=='\0')) //找到i在每个单词末尾的位置
{
k = i;
j = l;
while(j<k)
{
t=a[j];
a[j]=a[k];
a[k]=t; //每个单词逆置
j++;
k--;
}
l=i=i+2;
}
else if(a[i]==' '&&a[i-1]==' ')
{
l=i=i+1;
}
else
{
i++;
}
}
puts(a);
3.
//输入一个字符串,计算单词的个数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
//输入一个字符串计算单词的个数
char a[100]="";
gets(a);
int i=0,count=0; //定义单词计数器count
for(i=0;a[i]!='\0';i++)
{
//字母后面是空格或者是结束符'\0'时,就是有一个单词
if(a[i]!=' '&&(a[i+1]==' '||a[i+1]=='\0'))
count++;
}
printf("单词个数有%d个\n",count);
return 0;
}
4.
//穷举算法
int i=0,j=0,k=0;
for(i=0;i<100/5;i++)
{
for(j=0;j<(100-5*i)/3;j++)
{
k=100-j-i;
if(5*i+3*j+k/3==100&&k%3==0)
{
printf("鸡翁、鸡母、鸡雏为%d、%d、%d只\n",i,j,k);
}
}
}
5.
//打印九九乘法表
for(int i=1;i<=9;i++)
{
for(int j=1;j<=i;j++)
{
printf(" %d*%d=%d\t",j,i,i*j);
}
putchar(10);
}
6.
//循环输入n个元素,交换数组中的最大值和最小值
int n;
int i;
printf("输入一个数组的元素个数并输入该数组:\n");
scanf("%d",&n);
int arr[n];
int max=0;//最大值下标
int min=0;//最小值下标
int t;
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
arr[max] = arr[min] = arr[0];
for (i = 0; i < n; i++) {
if (arr[i] > arr[max]) {
max= i;
}
if (arr[i] < arr[min]) {
min= i;
}
}
printf("最大值:%d\n", arr[max]);
printf("最小值:%d\n", arr[min]);
t=arr[max];
arr[max]=arr[min]; //交换最大值和最小值
arr[min]=t;
for(i = 0;i<n;i++)
{
printf("%d\n",arr[i]);
}
7.
//输入字符串,输入变量k,将字符串循环右移k位
char a[100]="";
printf("输入一个字符串:");
gets(a);
int i,k=0;
int len=strlen(a);
printf("plesase enter k:");
scanf("%d",&k);
while(k--)
{
char t=a[len-1];
for(i=len-1;i>0;i--)
{
a[i]=a[i-1];
}
a[0]=t;
}
puts(a);
8.
char a[100],t;
gets(a);
for(int i=0;i<strlen(a);i++)
{
for(int j=0;j<strlen(a)-i-1;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
puts(a);
9.
//输入五个学生的姓名,输出其中最大值
char a[5][50]={""};
int i;
for(i = 0;i<5;i++)
{
printf("请输入第%d个姓名:",i+1);
scanf("%s",a[i]);
}
char b[50]="";
strcpy(b,a[0]);
for(i=1;i<5;i++)
{
if(strcmp(b,a[i])<0)
strcpy(b,a[i]);
}
printf("最大的姓名是:%s\n",b);