输入一个长度小于100的字符串,将其中下标为素数位置上的字母转为大写字母,要求使用指针进行数组的操作

如题所述

#include <stdio.h>
#include <conio.h>

#define ARR_LEN 100 /*数组长度上限*/

/* 试除法判断素数 */
/* 大于1的自然数num,若其不能被2~num^1/2(num的平方根)之间的任一自然数整除,则其为素数 */
/* num是素数返回1,否则返回0 */
int isPrime (int num) {
int i;
if (num <= 1) /* 素数必须是大于1的自然数 */
return 0;
if (num%2==0 && num!=2) /* 除2之外的偶数显然不是素数 */
return 0;
for (i=2; i*i<=num; i++)
if (num%i == 0)
return 0;
return 1;
}

int main (void) {
char str[ARR_LEN], *p;
int i;

gets (str);
p = str;
while (*p) {
if (isPrime(p-str) && (*p>='a' && *p<='z') ) /* 字符数组下标是素数,且为小写字母 */
*p -= 32; /* 转为大写字母 */
p++;
}

puts (str);

getch (); /* 屏幕暂留 */
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-02
#include <stdio.h>
int hs_fun(int n)
{
int i = 2;
for (i = 2; i*i <= n; i++){
if ((n % i) == 0){
return 1;
}
}
if (n<2){
return 1;
}
return 0;
}

int main()
{
char str0[100] = {};
char *p = str0;
int i = 0, j = 0;
scanf("%s", str0);
while(*p){
i++;
if(!hs_fun(i)){
if (*p >= 'a' && *p <= 'z') {
*p = *p + ('A' - 'a');
}
}
p++;
}
printf("%s", str0);
}

本回答被提问者采纳
相似回答