【记录贴】字符串内字符类型合法性判断

合法标准:

  1. 字符数大于等于8
  2. 至少含有下列字符类型中的三种:(1)A…Z (2)a…z (3)0…9 (4)~!@#$%^&*()-=

输入:若干字符数不大于50的仅含上述字符的字符串,以单独的"END"结束

    /*Usage: Check the letter`s type of a string*/
    #include<stdio.h>
    #include<stdbool.h>
    #include<string.h>
    #define ch *(str+i)
    bool ChkType(char* str);
    int main(void){    
    	char S[51];
        	for(scanf("%s", S); S[0]!='E' || S[1]!='N' || S[2]!='D' || S[3] != '\0'; scanf("%s", S)) 
        		printf(ChkType(S)?"YES\n":"NO\n");
         	return 0;
    }
    bool ChkType(char* str){    
    	bool A[4]={0};    
    	int i;    
    	if(strlen(str)>=8)    
    	for(i=0; i<strlen(str); i++)    
    	{       
    		if(ch <= 'Z' && ch >= 'A')            
    			A[0] = 1;        
    		else if(ch <= 'z' && ch >= 'a')           
    			A[1] = 1;        
    		else if(ch <= '9' && ch >= '0')            
    			A[2] = 1;        
    		else            
    			A[3] = 1;       
    		if(A[0]+A[1]+A[2]+A[3] == 3)           
    			return 1;    
    		}    
    	return 0;
    }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是使用字符指针编写的程序: ```c #include <stdio.h> #include <string.h> int main() { int n, i; char x, a[100]; printf("请输入一个字符串a:\n"); scanf("%s", a); printf("请输入要插入的字符x:\n"); scanf(" %c", &x); printf("请输入要插入的位置i:\n"); scanf("%d", &i); n = strlen(a); if (i <= 0 || i > n) { printf("输入的位置不合法!\n"); return 0; } // 在a[i-1]处插入x for (int j = n; j >= i; j--) { a[j] = a[j-1]; } a[i-1] = x; printf("插入后的字符串a为:%s\n", a); return 0; } ``` 在上面的程序中,首先通过 `scanf()` 函数输入字符串 `a`、字符 `x` 和位置 `i`。然后使用 `strlen()` 函数获取字符串 `a` 的长度 `n`。如果输入的位置 `i` 不合法,则直接输出提示信息并结束程序。 如果输入的位置 `i` 合法,则从字符串 `a` 的末尾开始,依次将每个字符向后移动一位,直到插入位置 `i-1` 处。最后将字符 `x` 插入到位置 `i-1` 处,并输出插入后的字符串 `a`。 ### 回答2: 字符指针是指向字符类型的指针变量。使用字符指针编写程序,可以通过指针操作来对字符串进行处理。 下面的程序是用字符指针实现在字符串的任意位置插入字符的功能: ```c #include <stdio.h> void insertChar(char *str, int index, char ch) { int len = strlen(str); // 获取字符串的长度 char temp[len + 2]; // 创建一个临时数组,用于存放插入字符后的字符串 strncpy(temp, str, index); // 复制插入位置之前的字符到临时数组中 temp[index] = ch; // 在插入位置处插入字符 strncpy(temp + index + 1, str + index, len - index); // 复制插入位置之后的字符到临时数组中 strcpy(str, temp); // 将临时数组的内容复制回原字符串 } int main() { int n, i; char x; printf("请输入字符串的长度n: "); scanf("%d", &n); char str[n + 1]; // 创建一个长度为n的字符串数组 printf("请输入字符串a: "); scanf("%s", str); printf("请输入要插入的字符x: "); scanf(" %c", &x); // 添加一个空格字符来忽略之前输入的换行符 printf("请输入要插入的位置i: "); scanf("%d", &i); insertChar(str, i, x); // 调用插入字符函数 printf("插入后的字符串a为: %s\n", str); return 0; } ``` 在这个程序中,我们首先定义了一个`insertChar`函数,它接受三个参数:字符串指针`str`、插入位置`index`和要插入的字符`ch`。在这个函数中,我们首先获取字符串的长度,然后创建一个临时数组`temp`来存放插入字符后的字符串。通过`strncpy`函数将插入位置之前的字符复制到`temp`数组中,然后在插入位置处插入字符。最后,再使用`strncpy`函数将插入位置之后的字符复制到`temp`数组中。最后,使用`strcpy`函数将`temp`数组的内容复制回原字符串。 在`main`函数中,我们首先获取用户输入的字符串长度`n`,然后创建一个长度为`n`的字符数组`str`,并获取用户输入的字符串。接着,获取要插入的字符`x`和要插入的位置`i`。最后,调用`insertChar`函数来插入字符,并输出结果。 请注意,这个程序假设用户输入的插入位置`i`略大于0且小于字符串的长度`n`。如果用户输入的值不满足这个条件,可能会导致程序出现异常。 ### 回答3: 字符指针是指向字符串的指针变量。它可以用来访问字符串中的各个字符,并对字符串进行操作和处理。 根据题目要求,假设输入的字符串长度为n,插入的字符为x,插入位置为i。我们可以通过字符指针来完成这个任务。 首先,我们定义一个字符数组a,并使用字符指针p指向数组a的首地址。然后,通过读入的方式将字符串a输入到数组a中,并记录字符串的长度n。 接下来,我们通过判断插入位置i的合法性,即0<i<n,确定插入位置是否有效。如果位置有效,则可以进行插入操作。 插入操作的思路是,从插入位置i开始,将后面的字符向后移动一个位置,为新字符x腾出空间,然后将新字符x插入到位置i上。 具体实现时,可以使用循环结构和字符指针p来完成字符的移动和插入。首先,使用循环将指针p移动到插入位置i的前一个位置,即p += i-1。然后,使用循环将i位置之后的字符向后移动一个位置,即从后往前遍历字符指针p,并将当前字符赋值给下一个位置的字符,直到移动到字符串的末尾。最后,将新字符x赋值给插入位置i处的字符。 完成插入操作后,输出插入后的字符串a即可。 总之,字符指针在编写程序中可以用来处理字符串操作,通过控制指针的移动和字符的赋值,可以对字符串进行插入、删除、替换等操作。在这个题目中,我们使用字符指针在字符串a的指定位置插入字符x,最后输出插入后的字符串a。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值