C语言字符串长度,追加,赋值,逆序,回文数(拆数和拼数)

目录

求字符串长度

字符串复制

字符串追加

例:从键盘输入一串字符,以回车结束,判断其中数字字符的个数

如果让你输出字符串个数,和字符串本身就需要用到数组

逆序问题

数值或字符串

 将一个含有10个元素的整形数组逆序存放后输出

逆序(引出回文)

输入一个字符串,逆序后输出

回文问题

回文字符

输入一个字符,判断是不是回文

 回文数

输入一个数判断是不是回文数


求字符串长度(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("不是回文数");
}

猜你喜欢

转载自blog.csdn.net/m0_64365315/article/details/128878926