qq_42295590
小小小小菜鸡
2018-05-25 09:03
采纳率: 100%
浏览 2.3k

字符串出现乱码,c++小萌新求助

运行后出现乱码。图片说明
图片说明

 #include <iostream>
#include <string.h>
#include <cstdio>
using namespace std;

void rep(char *str,char *fstr,char *rstr)
{
    int i,j,k,n,x,y=0,cnt=0;
    char sss[50];
    n=strlen(fstr);
    x=strlen(rstr);
    for(i=0;str[i]!='\0';i++) {
        if(str[i]==fstr[0]) {
                k=1;
                j=i+1;
            while(j<i+n) {
                 if(str[j]==fstr[k]) {
                    j++;
                    k++;
                 }
                 else break;
            }
            if(j==i+n) {
               strcat(sss,rstr);
               cnt++;
               i=j-1;
               y=j+(x-n)*cnt-1;
            }
        }
        else sss[y]=str[i];
        y++;
    }

    sss[y]='\0';
    strcpy(str,sss);
}
int main()
{
    char str[50]="iffordowhileelsewhilebreak";
    char fstr[10]="while";
    char rstr[10]="struct";
    /*gets(str);
    gets(fstr);
    gets(rstr);*/
    rep(str,fstr,rstr);
    cout<<str<<endl;
    return 0;
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • caozhy
     #include <iostream>
    #include <string.h>
    #include <cstdio>
    using namespace std;
    
    void rep(char *str,char *fstr,char *rstr)
    {
        int i,j,k,n,x,y=0,cnt=0;
        char sss[50];
        memset(sss, 0, 50); //加上这个
        n=strlen(fstr);
        x=strlen(rstr);
        for(i=0;str[i]!='\0';i++) {
            if(str[i]==fstr[0]) {
                    k=1;
                    j=i+1;
                while(j<i+n) {
                     if(str[j]==fstr[k]) {
                        j++;
                        k++;
                     }
                     else break;
                }
                if(j==i+n) {
                   strcat(sss,rstr);
                   cnt++;
                   i=j-1;
                   y=j+(x-n)*cnt-1;
                }
            }
            else sss[y]=str[i];
            y++;
        }
    
        sss[y]='\0';
        strcpy(str,sss);
    }
    int main()
    {
        char str[50]="iffordowhileelsewhilebreak";
        char fstr[10]="while";
        char rstr[10]="struct";
        /*gets(str);
        gets(fstr);
        gets(rstr);*/
        rep(str,fstr,rstr);
        cout<<str<<endl;
        return 0;
    }
    
    
    点赞 评论
  • caozhy

    https://ideone.com/LfYSkP
    在线测试结果
    iffordostructelsestructbreak

    点赞 评论
  • lsfv001
    lsfv001 2018-05-25 09:18

    没有c币了。
    比较奇怪的写法。
    1.char str[50]="iffordowhileelsewhilebreak"; 如果要strlen,那么 定义完后。加个\0 .eg: str[手动算位置]='\0';
    2. 算好了位置,那么 for(i=0;str[i]!='\0';i++) { 就用长度了strlen,str[i]!='\0' 太奇怪的写法。
    根本上就是 str[50],定义完,里面的内容是未定义的。要摸初始化全部为\0,要不算好位置赋值 '\0'

    点赞 评论
  • inkqxy
    墨水干了 2018-05-25 09:25

    哪里乱码了,没有问题啊

    点赞 评论
  • ZhihengTao
    ZhihengTao 2018-05-25 10:20
    点赞 评论
  • jsongb
    jsongb 2018-05-25 11:38

    新建一个工程 把代码粘贴进去试一下 我就是这样解决的

    点赞 评论
  • tianshui1009
    tianshui1009 2018-05-25 12:52
    1. 算好了位置,那么 for(i=0;str[i]!='\0';i++) { 就用长度了strlen,str[i]!='\0' 太奇怪的写法。 根本上就是 str[50],定义完,里面的内容是未定义的。要摸初始化全部为\0,要不算好位置赋值 '\0'
    点赞 评论

相关推荐