字符串
数组复习例题
-
从键盘输入 10 位同学的考试成绩存入数组,按照低分到高分排序;然后输出;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
#include <stdbool.h> #include <stdio.h> #define arrLen 10 void print(int a[], int size) { for (int i = 0; i < size; i++) { printf("%d ", a[i]); } printf("\n"); } // sort 冒泡排序 void sort(int a[], int size) { // 外层循环 0:n-1 次 for (int i = 0; i < size - 1; i++) { bool exchange = false; // 内存循环 1:n-i 次 for (int j = 1; j < size - i; j++) { if (a[j - 1] > a[j]) { int t = a[j - 1]; a[j - 1] = a[j]; a[j] = t; } } if (exchange) { break; } } } int main(int argc, char const* argv[]) { int a[arrLen]; printf("请输入 10 个成绩:\n"); for (int i = 0; i < arrLen; i++) { scanf("%d", &a[i]); } printf("正在排序...\n"); sort(a, arrLen); print(a, arrLen); return 0; }
-
数组元素拆分,从键盘输入 n,表示数组中存储元素个数,然后输入 n 个数存入数组,把偶数放在b 数组,奇数放在 c 数组中;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
#include <stdio.h> void print(int a[], int size) { for (int i = 0; i < size; i++) { printf("%d ", a[i]); } printf("\n"); } int inputNum() { printf("请输入一个数:"); int v = 0; scanf("%d", &v); return v; } void inputArray(int a[], int size) { printf("请依次输入 %d 个数值\n", size); for (int i = 0; i < size; i++) { scanf("%d", &a[i]); } } int main(int argc, char const* argv[]) { int n = inputNum(); int a[n]; inputArray(a, n); int b[n], c[n]; int b1 = 0, c1 = 0; // 判断数组元素是奇数还是偶数,并且赋值到规定数组 for (int i = 0; i < n; i++) { if (a[i] % 2 == 0) { b[b1] = a[i]; b1++; } else { c[c1] = a[i]; c1++; } } print(b, b1); print(c, c1); return 0; }
-
已知数组 a,将 0 集中放在数组前面,把 1 放在后半部分;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
#include <stdio.h> #define arrLen 10 void print(int a[], int size) { for (int i = 0; i < size; i++) { printf("%d ", a[i]); } printf("\n"); } void core(int a[], int size) { int i = 0, j = size - 1; while (i < j) { if (a[i] == 0) { i++; continue; } if (a[j] != 0) { j--; continue; } int t = a[i]; a[i] = a[j]; a[j] = t; } } int main(int argc, char const* argv[]) { int a[arrLen] = {1, 1, 0, 0, 1, 0, 1, 1, 1, 0}; // result a[] = {0,0,0,0,1,1,1,1,1,1}; 4个0,6个1 core(a, arrLen); print(a, arrLen); return 0; }
字符串
字符串常量的表示,一定要加双引号,字符常量要加单引号;
字符串概念:是有若干多个符号组成;
例如:
|
|
字符串变量:
in c program ,没有字符串数据类型;字符串是用字符数组来存储;字符串变量的定义也就是定义字符数组;
|
|
字符赋值,只有在定义字符串时,才能整体赋值,定义后不能整体赋值;
字符数组的 sizeof 是 1,每个下标只能存储一个字符;结尾是 \0,表示结束,存储时仅加一次,若是用户删除插入操作,必须自己手动添加;
在访问字符串时,只要遇到结束标志,就停止访问;
|
|
|
|
使用 scanf 获取字符串,输入时不能带有空格,否则空格后面就自动断开;
|
|
字符串常量
|
|
c program 关于字符串操作的一些库函数
函数都是在 <string.h> 头文件中;
|
|
若是 getchar 获取一个字符,想要的不是字符,而是数字本身,减去 ‘0’ 即可得到数字本身,看下面例子:
|
|
字符串例题
-
字符串操作:从键盘输入一串字符,把其中大写字母改成小写字母;
1 2 3 4 5 6 7 8 9 10 11 12 13
#include <stdio.h> int main(int argc, char const* argv[]) { char p[100]; fgets(p, 100, stdin); for (int i = 0; i < p[i] != '\0'; i++) { if (p[i] >= 'A' && p[i] <= 'Z') { p[i] += 32; } } fputs(p, stdout); return 0; }
-
字符串统计:从键盘输入一串字符(一句话),统计这句话中单词的个数;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#include <stdio.h> int count(char a[]) { int sum = 0; for (int i = 0; i < a[i] != '\0'; i++) { if (a[i] == ' ') { sum++; } } return sum + 1; } int main(int argc, char const* argv[]) { char a[100]; fgets(a, 100, stdin); int c = count(a); printf("%d\n", c); return 0; }