读取字符串并定向更改字符串中的字符时出现问题

读取字符串并定向更改字符串中的字符时出现问题

在更改字符的第二个if语句中,不能将‘!’改为‘!!’

#include
int main()
{
    char ch;  //读取输入
    char cs[255];  //储存输入 
    char cs1[255]; //替换输入 
    int n=-1; 
    int l=0;     //记录.替换次数 
    int m=0;     //记录!替换次数 
    int q=0;
    while((ch=getchar())!='#')
    {
        cs[n]=ch;
        n++;
    }
    for(;q<=n;q++)
    {
        if(cs[q]=='.')
        {
            cs1[q]='!';
            l++;
            continue;
        }
        if(cs[q]=='!')
        {
        
            cs[q]='!';
            cs[++q]='!';
            m++;
            continue;
        }
        cs1[q]=cs[q];
    }
    puts(cs1);
    printf("\n一共替换了%d次",l+m);
}

你是想把英文句号替换成英文感叹号,英文感叹号替换为两个感叹号吗?并记录替换次数吗?

img

仅供参考,谢谢!

#include<stdio.h>
int main()
{
    char ch;                    // 读取输入
    char cs[255];                // 储存输入 
    char cs1[255];                // 替换输入 
    int n = 0;                    // 这里修改为0
    int l = 0;                    // 记录.替换次数 
    int m = 0;                    // 记录!替换次数 
    int q = 0;
    int q1 = 0;
    while ((ch = getchar()) != '#' && n < 255)
    {
        cs[n] = ch;
        n++;
    }
    for (; q < n; q++)
    {
        if (cs[q] == '.')
        {
            cs1[q1++] = '!';
            l++;
            //continue;
        }
        else if (cs[q] == '!')
        {

            cs1[q1++] = '!';
            cs1[q1++] = '!';
            m++;
            //continue;
        }
        else
            cs1[q1++] = cs[q];
    }
    cs1[q1] = '\0';
    puts(cs1);
    printf("\n一共替换了%d次", l + m);
}




for(int i=0;q<=n;q++,i++)
    {
        if(cs[q]=='.')
        {
            cs1[i]='!';
            l++;
            continue;
        }
        if(cs[q]=='!')
        {
        
            cs1[i]='!';
            cs1[++i]='!';
            m++;
            continue;
        }
    }

循环替换写错了,修改如上。cs既然是存储就不应该被修改,当遇到一个!cs中的下一个也被修改为!,这样就有无穷多!好,直到越界崩溃。编译有错就把i的定义移动开头