目录
求字符串长度(strlen)
n可以不用
#include<stdio.h> void main() { int i=0, n = 0; char s[100]; gets(s); while (s[i] != '\0') { n++; i++; } printf("长度为%d", n); }
指针的方式
#include<stdio.h> void main() { char s[81], * p; int n=0; gets(s); p = s; while (*p++) n++; printf("长度为%d", n); }
字符串复制(strcpy)
#include<stdio.h> void main() { char a[40], b[40]; int i = 0; gets(a); while (a[i] != '\0') { b[i] = a[i]; i++; } b[i] = '\0'; puts(b); }
字符串比较 strcmp
目的操作数大于源操作数 返回正数 相等返回0,否则返回负数
#include<stdio.h> int mystrcmp(char* s1, char* s2) { while (*s1 == *s2) { if (*s1 == '\0') return 0;//比到\0就退出说明相等 s1++; s2++; } return (*s1 - *s2); } void main() { char a[20], b[20]; int n; gets(a); gets(b); n = mystrcmp(a, b); if (n==0) printf("%s=%s", a, b); else if (n>0) printf("%s>%s", a, b); else if (n<0) printf("%s<%s", a, b); }
字符串追加
#include<stdio.h> void main() { //把字符串b拼接到字符串a char a[40], b[20]; int i = 0, j = 0; gets(a); gets(b); while (a[i] != '\0')//统计a的长度,找到\0 i++; while (b[j] != '\0')//从长度后开始追加 { a[i] = b[j]; i++; j++; } a[i] = '\0'; printf("\n"); puts(a); }
例:从键盘输入一串字符,以回车结束,判断其中数字字符的个数
#include<stdio.h> void main() { int i=0; char s; while ((s=getchar())!= '\n') { if (s >= '0' && s <= '9') i++; } printf("%d", i); }
如果让你输出字符串个数,和字符串本身就需要用到数组
#include<stdio.h> void main() { char arr[10]; int i = 0,n = 0; while ((arr[i] = getchar()) != '\n') { if (arr[i] >= '0' && arr[i] <= '9') n++; i++; } arr[i] = '\0'; printf("%d\n", n); printf("%s", arr); }
逆序问题
数值或字符串
n个数(字符)要交换 n/2次
a[i]与a[n-i-1]交换
将一个含有10个元素的整形数组逆序存放后输出
#include<stdio.h> void main() { int i, arr[10], temp,n=0; //输入 for (i = 0; i < 10; i++) scanf("%d", &arr[i]); n = i; //逆序 for (i = 0; i < n / 2; i++) { temp = arr[i]; arr[i] = arr[n - 1 - i]; arr[n - 1 - i] = temp; } //输出逆序后的数组 for (i = 0; i < 10; i++) printf("%4d", arr[i]); }
逆序(引出回文)
输入一个字符串,逆序后输出
#include<stdio.h> void main() { char s[100], temp; int i = 0, n = 0; scanf("%s", s); //统计个数,找\0位置 while (s[i++] != '\0') n++; for (i = 0; i < n / 2; i++) { temp = s[i]; s[i] = s[n - 1 - i]; s[n - 1 - i] = temp; } printf("%s", s); }
回文问题
和上面一个道理 , 从交换变成了比较
回文字符
输入一个字符,判断是不是回文
#include<stdio.h> #include<string.h> void main() { char s[100]; int n, i; gets(s);//输入 n = strlen(s);//求长度 for (i = 0; i < n / 2; i++) if (s[i] != s[n - 1 - i]) break; //加一个站岗的,看看是从哪里出来的 if (i >= n / 2) printf("是回文数"); else printf("不是回文数"); }
回文数
两种方法 第一种分解, 第二种 求它 的逆序数(如果这个逆序数和本身相同那么即时回文数)
输入一个数判断是不是回文数
求逆序数,会分解数,和构造数,就会求了
#include<stdio.h> void main() { int num,t=0,s=0,num1; printf("请您输入一个数:"); scanf("%d", &num); num1 = num;//一会要拆,先存一下它 do { t = num % 10;//从后面开始取 s = s * 10 + t;//拼接 num = num / 10;//取完了把个位干掉 } while (num);// num!=0 if (s == num1) printf("是回文数"); else printf("不是回文数"); }