字符与数组的运用,请大家帮助解决

这个用数组怎么编程?存在空格,还存在换行,怎么用scanf来输入呀?

img

img

【法一】

#include <stdio.h>
#include <string.h>

// 加密单个单词的函数
void encryptWord(char* word) {
    int i, len = strlen(word);
    char c;

    for (i = 0; i < len; i++) {
        c = word[i];

        // 如果当前字母在A到Z的范围内
        if (c >= 'A' && c <= 'Z') {
            if (c >= 'A' && c <= 'M') {  // 如果当前字母是第一组字母中的字母
                c = 'N' + (c - 'A');     // 替换为对应的第二组字母中的字母
            } else if (c >= 'N' && c <= 'Z') {  // 如果当前字母是第二组字母中的字母
                c = 'A' + (c - 'N');            // 替换为对应的第一组字母中的字母
            }
        }

        // 将替换后的字母存储回原来的单词数组中
        word[i] = c;
    }
}

int main() {
    char word[101];  // 定义一个能够存储100个字符加上一个结束符'\0'的数组
    while (scanf("%s", word) != EOF) {  // 循环读入每个单词,直到结束符EOF
        encryptWord(word);          // 调用函数加密该单词
        printf("%s\n", word);       // 输出加密后的结果
    }
    return 0;
}

【法二】


#include <stdio.h>
#include <string.h>

void encryptWord(char* word) {
    int i;
    int length = strlen(word);

    for (i = 0; i < length; i++) {
        if (word[i] >= 'A' && word[i] <= 'Z') {
            if (word[i] >= 'A' && word[i] <= 'M') {
                word[i] = 'N' + (word[i] - 'A');
            } else if (word[i] >= 'N' && word[i] <= 'Z') {
                word[i] = 'A' + (word[i] - 'N');
            }
        }
    }
}

int main() {
    char input[100];
    scanf("%[^\n]", input); 

    char* word = strtok(input, " ");

    while (word != NULL) {
        encryptWord(word);
        printf("%s\n",  word);
        word = strtok(NULL, " ");
       
    }

    return 0;
}

以下内容引用CHATGPT、有用望采纳:

对于包含空格和换行的字符串,可以使用fgets()函数来读取输入。fgets()函数可以读取一行字符串,包括空格和换行符,并将其存储在一个字符数组中。

例如,下面的代码可以读取一个包含空格和换行的字符串:

char str[100];
fgets(str, 100, stdin);

其中,str是一个字符数组,用于存储读取的字符串,100是数组的大小,stdin表示从标准输入中读取数据。

如果需要将读取的字符串转换为其他类型的数据,可以使用sscanf()函数,例如:

int num;
sscanf(str, "%d", &num);

其中,%d表示读取一个整数,&num表示将读取的整数存储在变量num中。

完整的示例代码如下:

#include <stdio.h>

int main() {
    char str[100];
    int num;

    printf("请输入一个整数:");
    fgets(str, 100, stdin);
    sscanf(str, "%d", &num);

    printf("输入的整数为:%d\n", num);

    return 0;
}

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
如果想要输入一个带有空格的字符串,可以使用fgets函数来获取输入。该函数的用法如下:

char str[MAX_LENGTH];
fgets(str, MAX_LENGTH, stdin);

其中,MAX_LENGTH代表输入的最大长度,stdin代表标准输入。这样就可以输入带有空格的字符串了。

如果想要输入多个字符串,可以使用循环来输入。例如,想要输入5个字符串,可以使用以下代码:

char str[MAX_LENGTH];
for (int i = 0; i < 5; i++) {
    fgets(str, MAX_LENGTH, stdin);
    // 进行后续操作
}

对于数组的运用,可以使用下标来访问数组元素,例如:

int arr[5];
for (int i = 0; i < 5; i++) {
    scanf("%d", &arr[i]);
    // 进行后续操作
}

如果需要输入一个二维数组,可以使用两重循环来输入。例如,输入一个3x3的矩阵:

int matrix[3][3];
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        scanf("%d", &matrix[i][j]);
        // 进行后续操作
    }
}

完整代码如下:

#include <stdio.h>
#define MAX_LENGTH 100

int main() {
    char str[MAX_LENGTH];
    for (int i = 0; i < 5; i++) {
        fgets(str, MAX_LENGTH, stdin);
        printf("Input string %d: %s", i+1, str);
    }

    int arr[5];
    for (int i = 0; i < 5; i++) {
        scanf("%d", &arr[i]);
        printf("Input integer %d: %d\n", i+1, arr[i]);
    }

    int matrix[3][3];
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            scanf("%d", &matrix[i][j]);
            printf("Input element [%d][%d]: %d\n", i, j, matrix[i][j]);
        }
    }
    return 0;
}

如果我的回答解决了您的问题,请采纳!

这不就是固定加上13,超过26对26取模吗,很简单的。
顺便说下,这个问题下面,几位曾经被封的和投诉多次也不被封的“大神”真是聚集齐了。
GPT是免费的,如果题主喜欢GPT回答,也没必要给这些人送钱。如果GPT回答不满意,需要人工回答,请给我评论,我写给你。

该回答引用ChatGPT
这个问题是要求将输入的字符串中出现的字符按照出现次数从大到小输出,并且需要忽略空格和换行符。

可以使用数组来记录每个字符出现的次数,并使用一个循环来统计每个字符出现的次数。为了忽略空格和换行符,在输入字符串的时候可以使用gets()函数来输入整个字符串,然后再使用一个循环逐个统计每个字符的出现次数。

下面是示例代码:

c
#include <stdio.h>
#include <string.h>

int main() {
char str[1000];
int count[128] = {0}; // 记录每个字符出现的次数

printf("请输入一个字符串:
");
gets(str);

for (int i = 0; i < strlen(str); i++) {
if (str[i] != ' ' && str[i] != '
') {
count[str[i]]++;
}
}

// 找出出现次数最多的字符
int maxCount = 0;
for (int i = 0; i < 128; i++) {
if (count[i] > maxCount) {
maxCount = count[i];
}
}

// 从出现次数最多的字符开始输出
for (int i = maxCount; i >= 1; i--) {
for (int j = 0; j < 128; j++) {
if (count[j] == i) {
printf("%c:%d
", j, i);
}
}
}

return 0;
}


上面的代码中使用了一个名为count的数组来记录每个字符出现的次数。在输入字符串时,如果字符不是空格或换行符,就将对应的计数器加1。然后遍历整个计数数组,找到出现次数最多的字符,最后从出现次数最多的字符开始递减输出。