c语言60分前两个不对
查看原帖
c语言60分前两个不对
1290501
hgdhjgj楼主2024/4/12 10:36
#include <string.h>
#include <stdio.h>
int main() {
    int flag, a, b, n;
    char s[100], str[100];
    scanf("%d %s", &n, s);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &flag);
        if (flag == 1) {
            scanf("%s", str);
            strcat(s, str);
            printf("%s\n", s);
        } else if (flag == 2) {
            scanf("%d %d", &a, &b);
            strncpy(s, s + a, b);
            s[b] = '\0';
            printf("%s\n", s);
        } else if (flag == 3) {
            scanf("%d %s", &a, str);
            memmove(s + a + strlen(str), s + a, strlen(s) - a + 1);
            /** `s + a + strlen(str)`:这是移动后字符应该存放的起始位置。也就是说,从当前 `s` 的第 `a` 个位置开始,加上 `str` 的长度,这样我们可以确保 `str` 能够被插入到正确的位置。
            * `s + a`:这是移动前字符的起始位置,即当前 `s` 的第 `a` 个位置。
            * `strlen(s) - a + 1`:这是要移动的字符数量。从位置 `a` 到字符串 `s` 的末尾的所有字符都会被移动。*/
            memcpy(s + a, str, strlen(str));
            /** `s + a`:这是目标位置的指针,即 `str` 应该被复制到的位置,也就是 `s` 的第 `a` 个位置。
            * `str`:这是源位置的指针,即 `str` 中字符的当前位置。
            * `strlen(str)`:这是要复制的字符数量,即 `str` 的长度。*/
            printf("%s\n", s);
        } else if (flag == 4) {
            scanf("%s", str);
            a = strstr(s, str) - s;
            printf("%d\n", a);
        }
    }
    return 0;
}
2024/4/12 10:36
加载中...