1、从一个字符数组中读出相应的整数、实数
#include<stdio.h>
void read(char *str)
{
int i = 0;
int m = 0;
int n = 0;
int temp1 = 0;
float k = 0.1;
float temp2 = 0.0;
int a[100] = {0};
float b[100] = {0};
while( *(str + i) != '\0' )
{
while( (*(str + i) >= '0' && *(str + i) <= '9') || *(str + i) == '.' )
//当字符串中的字符大于0小于9或者为小数点时进入循环
{
while( *(str + i) >= '0' && *(str + i) <= '9' )//当字符为数字时
{
temp1 = temp1 * 10 + *(str + i) - '0'; //将遇到的字符转换为整型数字
i++;
}
if( *(str + i) == '.' ) //当遇到小数点时
{
temp2 = temp1; //将之前的整型数字赋给temp2,作为浮点型的整数部分
i++;
while( *(str + i) >= '0' && *(str + i) <= '9' ) //当小数点后为数字时
{
temp2 = temp2 + ( *(str + i) - '0' ) * k; //让字符乘以相应的小数位上的单位数值再加给temp2
k = k * 0.1; //用来控制相应的小数位上的单位数值
i++;
}
b[n++] = temp2; //将所得的浮点型数值传给浮点型数组b
temp2 = 0; //让temp2清零
}
else
{
a[m++] = temp1; //没有遇到小数点说明是整型数,传给整型数组a
i++;
temp1 = 0; //让temp1清零
}
}
i++;
}
printf("整型数有:\n");
for( i = 0; i < m; i++ )
{
printf("%d ",a[i]); //输出整型数组a中的数值
}
printf("\n");
printf("浮点型数有:\n");
for( i = 0; i < n; i++ )
{
printf("%.4f ",b[i]); //输出浮点数数组b中的数值,并让数值小数点后输出4位
}
printf("\n");
}
int main()
{
char str[100] = {0};
printf("please input a string with some numbers:\n");
scanf("%s",str); //输入带数字的字符串
read(str); //调用read函数
return 0;
}
2、将整数转换为相应的一个字符数组。
分析:从个位提取数字,组合字符
符号位的处理 12345=>”12345”
#include <stdio.h>
void convert(int num, char *str)
{
int i = 0;
int j = 0;
while( num != 0 )
{
if(num < 0)
{
num = -num; //如果num < 0,将其变成正数
}
i = num % 10 + '0';
str[j++] = i;
num /= 10; //从最低位开始将num中每一位取出加上'0'变成数字字符并存到str数组中
}
while(j--)
{
printf("%c",str[j]); //倒着输出str数组中的字符
}
printf("\n");
}
int main()
{
char str[100] = {0};
int num = 0;
printf("please input a number:");
scanf("%d",&num); //输入num的值
if(num < 0)
{
printf("-"); //如果num < 0,输出一个'-'
}
convert(num, str); //调用转换函数
return 0;
}
3、字符串数组的冒泡排序,从小到大
#include <stdio.h>
#include <string.h>
void bubble( char **str, int len )
{
int i = 0;
int j = 0;
char *temp = NULL;
for( i = 0; i < len - 1; i++ )
{
for( j = 0; j < len - 1 - i; j++ )
{
if(strcmp( str[j],str[j + 1] ) >= 0) //调用字符串比较函数比较字符串函数中前后两个字符串的大小
{
temp = str[j];
str[j] = str[j + 1];
str[j + 1] = temp;
} //如果前面的字符串大于后面的字符串,交换两者位置
}
}
}
int main()
{
char *str[10] = {"ertyu","werkt","tyuio","cvbnm","asdfz"};
int i = 0;
int len = 5;
bubble( str, len ); //调用bubble函数
for( i = 0; i < len; i++ )
{
printf("%9s",str[i]); //输出排好序的字符串函数,并让每个字符串占9个字节空间
}
printf("\n");
return 0;
}
4、查找介于n1与n2(0
#include <stdio.h>
int prime(int i)
{
int j = 2;
for( j = 2; j < i; j++ )
{
if( i % j == 0)
{
return 0; //如果i能整除比1大,比i小的数说明i不是素数,返回0,不能整除说明是素数返回1
}
}
return 1;
}
int twosame( int i )
{
int j = 0;
int m = 0;
int n = 0;
int count = 0;
int a[10] = {0};
while(i)
{
a[j++] = i % 10;
i /= 10; //将i每一位上的数取出,放入数组a[j]中
}
for( m = 0; m < j; m++ )
{
for( n = m + 1; n < j; n++ )
{
if( a[m] == a[n] )
{
count++; //从头开始比较后面的数有没有和前面的相同的,有count+1
}
}
}
if(count == 1)
{
return 1;
}
else
{
return 0;
} //如果count==1,说明a[j]数组中有且只有两个数相等即i的十进制表示中有且仅有两个相同的数字位,返回1,不为1,返回0
}
int main()
{
int i = 0;
int count = 0;
int n1 = 0;
int n2 = 0;
printf("please input 2 number(0 < n1 < n2 <32678):");
scanf("%d,%d",&n1,&n2); //输入n1 n2的值
printf("The result is:\n");
for( i = n1; i <= n2; i++ )
{
if( (prime(i) == 1) && (twosame(i) == 1) ) //调用prime函数和twosame函数,如果两个函数返回值都为1,执行if语句
{
count++; //当一个数满足条件count+1
printf("%8d",i); //输出该数,并让该数占5个字节空间
if( count % 10 == 0)
{
printf("\n");
} //当count能整除10时,一行已经输出10个值,换行
}
}
printf("\n");
return 0;
}
5、编写函数void change(char *a,char *b,char*c)。 函数功能是首先把b指向的字符串逆向存放,然后将a指向的字符串和b指向的字符串按排列顺序交叉合并到c指向的数组中,两个字符串中过长的剩余字符接在c指向数组的尾部。
例如,当a指向的字符串为”abcdefg”,b指向的字符串为”1324”时,c指向的数组中字符串应为”a4b2c3d1efg”。
#include <stdio.h>
#include <string.h>
void swap( char *b )
{
int i = 0;
int temp = 0;
int len = strlen(b);
for( i = 0; i < len / 2; i++ )
{
temp = b[i];
b[i] = b[len - 1 - i];
b[len - 1 - i] = temp;
} //逆序函数,将字符串b中的字符逆向存放
}
void change( char *a, char *b, char *c )
{
swap(b); //调用逆序函数
while( *a != '\0' && *b != '\0' )
{
*c = *a;
c++;
a++;
*c = *b;
c++;
b++;
} //当字符串a b都不为空时,将a b中的字符交叉存放到字符串c中
while( *a != '\0' && *b == '\0' )
{
*c = *a;
c++;
a++;
} //当字符串a不为空,b为空时,将a中剩余的字符存放到c中
while( *a == '\0' && *b != '\0' )
{
*c = *b;
c++;
b++;
} //当字符串a为空,b不为空时,将b中剩余的字符存放到c中
*c = '\0';
}
int main()
{
char a[100] = {0};
char b[100] = {0};
char c[100] = {0};
printf("please input the first string:\n");
scanf("%s",a); //输入字符串a
printf("please input the second string:\n");
scanf("%s",b); //输入字符串b
change(a,b,c); //调用change函数
printf("the result is :\n");
printf("%s\n",c); //输出结果字符串c
return 0;
}