//相关函数
/* 1.int / float to string / array:
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。 ● itoa():将整型值转换为字符串。 ● ltoa():将长整型值转换为字符串。 ● ultoa():将无符号长整型值转换为字符串。 ● gcvt():将浮点型数转换为字符串,取四舍五入。 ● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。 ● fcvt():指定位数为转换精度,其余同ecvt()。
除此外,还可以使用sprintf系列函数把数字转换成字符串,其比itoa()系列函数运行速度慢
- string / array to int / float C / C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。 ● atof():将字符串转换为双精度浮点型值。 ● atoi():将字符串转换为整型值。 ● atol():将字符串转换为长整型值。 ● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。 ● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。 ● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。 */
//题一:从一个文本文件读取一组数字(每行一个数字),然后对其进行从小到大的排序,最后写入到另外一个文件中去 int bubbble_sort(int *array,int len){//传递数组,一般需要加上数组个数这个参数 int p = array; int temp; //int len=sizeof((array)/sizeof(int));//这种方式是得不到数组长度的 for (int i = 0;i < len;i++) { for (int j = 1;j < len - i;j++) { if ((p + j-1) > *(p + j)) { temp = *(p + j); *(p + j) = *(p + j-1); *(p + j-1) = temp; }
}
}
return 0;
}
int main22() { //检测一下bubble 函数是否可用 //int array[8] = { 1,2,34,546,32,3,456,5 }; //bubbble_sort(array); //for (int x = 0;x < 8;x++) { //printf("array[%d]==%d\n", x, array[x])};
//读文件
FILE *p1 = fopen("C:\\Users\\acer\\Desktop\\test.txt", "r");
int array[100] = { 0 };//文件过大会导致数组过大,最终栈溢出,最好在堆中分配内存
int *p = array;
char buf[20] = { 0 };//用来存放读取的字符串
int len = 0;//用来计数一共读了多少个数字
if (p1 == NULL) {//"=="才是比较等于号,“=”是赋值号,勿弄混
printf("failure!\n");
}
else {
memset(buf, 0, sizeof(buf));
while (!feof(p1)) {
fgets(buf, sizeof(buf), p1);
//printf("%s\n", buf);
array[len] = atoi(buf);
//printf("array[%d]==%d\n",len,array[len]);
len++;
}fclose(p1);
}
//排序
bubbble_sort(array,len);
for (int i = 0;i < len;i++) {
printf("array[%d]==%d\n", i, array[i]);
}
//写入
FILE *p2 = fopen("C:\\Users\\acer\\Desktop\\test4.txt", "w");
for (int i = 0;i < len;i++) {
memset(buf, 0, sizeof(buf));
sprintf(buf, "%d\n", array[i]);//将数组成员转换为字符串
fputs(buf, p2);
}
fclose(p2);
return 0;
}
//下面演示在堆中建立动态数组的方式:思路,先确定文件共计多少个数字,然后去堆中分配
int main23() {
FILE *p1 = fopen("C:\\Users\\acer\\Desktop\\test.txt", "r");
int len = 0;//计数器
char buf[30] = { 0 };
while (!feof(p1)) {
memset(buf, 0, sizeof(buf));
fgets(buf, sizeof(buf), p1);
len++;
}
//printf("%d\n", len);
int *array = malloc(sizeof(int)*len);
//int *array=calloc(sizeof(int),len);//不需要memset
//后续代码基本相同,记得把计数器重新回到0
memset(array, 0, sizeof(array));
free(array);
fclose(p1);
return 0;
}
//题二:一文本文件,文件中每一行均为一个运算表达式(如:4 + 7 =),读取该文件内容并计算出每个表达式并写入到另外一个文件(如:4 + 7 = 11)
//思路,先解决如何读取一个字符串(“4 + 7 = ”)里面的数字和操作符,然后就按照一般的读、循环、写入便可 //strncpy()函数:复制字符串的前n个字符
int cal_file(char *s) { char buf[50] = { 0 }; char oper = 0; char buf2[50] = { 0 }; int len = strlen(s);
int i=0;
for ( i = 0;i < len;i++)
{
if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') {
memset(buf, 0, sizeof(buf));
strncpy(buf, s, i);
//printf("buf==%s\n", buf);
oper = s[i];
break;
}
}
int start = i + 1;
for (;i < len;i++)
{
if (s[i] == '=')
{
strncpy(buf2, &s[start], i - start);
}
}
switch (oper)
{case '+':
return atoi(buf) + atoi(buf2);
case '-':
return atoi(buf) - atoi(buf2);
case '*':
return atoi(buf) * atoi(buf2);
case '/':
if (atoi(buf2) != 0) {
return (atoi(buf) / atoi(buf2));
}
else { return 0; }
default:
break;
}
}
void mod(char *s) {//用来去除字符串结尾的空格 int len = strlen(s); if (s[len-1] == '\n') s[len-1] = 0; return; }
int main() { //char s[] = "7*4="; //printf("%d\n",cal_file(s)); FILE *p=fopen("C:\Users\acer\Desktop\test.txt", "r"); FILE *p1=fopen("C:\Users\acer\Desktop\test5.txt", "w"); char buf[1024] = { 0 }; char buf2[1024] = { 0 }; while (!feof(p)) { memset(buf, 0, sizeof(buf)); fgets(buf, sizeof(buf),p);//读取一行,以'\n'结尾 mod(buf); int value=cal_file(buf); memset(buf2, 0, sizeof(buf2)); sprintf(buf2,"%d\n", value); //printf("%s", buf2); //sprintf(buf2,"%s%d", buf, value); //printf("%s\n", strcat(buf, buf2)); fputs(strcat(buf, buf2), p1);
}
fclose(p);
fclose(p1);
return 0;
}
/* 1.int / float to string / array:
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。 ● itoa():将整型值转换为字符串。 ● ltoa():将长整型值转换为字符串。 ● ultoa():将无符号长整型值转换为字符串。 ● gcvt():将浮点型数转换为字符串,取四舍五入。 ● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。 ● fcvt():指定位数为转换精度,其余同ecvt()。
除此外,还可以使用sprintf系列函数把数字转换成字符串,其比itoa()系列函数运行速度慢
- string / array to int / float C / C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。 ● atof():将字符串转换为双精度浮点型值。 ● atoi():将字符串转换为整型值。 ● atol():将字符串转换为长整型值。 ● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。 ● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。 ● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。 */