Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
输入:a2b3c4,输出:aabbbcccc_C_String - Fatal编程技术网

输入:a2b3c4,输出:aabbbcccc

输入:a2b3c4,输出:aabbbcccc,c,string,C,String,我编写的代码没有产生任何输出。它只是将字符串作为输入: #include<stdio.h> #include<conio.h> #include<string.h> int main() { char str[100]; int i,size,s,pos; scanf("%s", &str); size=strlen(str); for(i=0;i<size;i++) { if((str[

我编写的代码没有产生任何输出。它只是将字符串作为输入:

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

int main() {
    char str[100];
    int i,size,s,pos;
    scanf("%s", &str);
    size=strlen(str);
    for(i=0;i<size;i++) {
        if((str[i]>=65 && str[i]<=90) || (str[i]>=97 && str[i]<=122)) {
            i++;
        } else {
            if(str[i]>='0' && str[i]<='9') {
                for(s=0;s<str[i];s++) {
                    printf("%s", str[i-1]);
                }
            }
            i++;
        }
    }
}
#包括
#包括
#包括
int main(){
char-str[100];
int i,尺寸,s,位置;
scanf(“%s”和&str);
大小=strlen(str);

对于(i=0;i=65&&str[i]=97&&str[i]='0'&&str[i],整个代码有许多错误:

  • 您尝试使用
    %s
    打印单个字符,该字符用于字符串。这会导致未定义行为——单个字符的正确转换为
    %c
  • 循环直到某个“数字字符”,如
    '3'
    。您希望循环直到数字
    3
    。减去
    '0'
    即可
  • 执行
    scanf(“%s”,…)
    是潜在的未定义行为,它最终将溢出任何缓冲区。您可能需要读取我的。简而言之,至少添加一个字段宽度,在您的情况下
    scanf(“%99s”,…)
  • scanf()
    需要一个指向数据放置位置的指针,但
    str
    的计算结果已经是指向第一个数组元素的指针。因此,在此处添加
    &
    错误的,导致更多未定义的行为
  • 始终检查可能失败的函数的返回值。如果
    scanf()
    未能转换某些内容,则
    str
    保持未初始化状态,并且以下
    strlen()
    未定义行为
  • 您的代码使用ASCII值,这是非常常见的,但不是强制性的;这样,它在不使用ASCII的机器上就不起作用
您甚至不需要使用缓冲区来实现所需的功能,只需一个字符即可保存最后读取的字符,如下所示(其他问题在本例中也已解决):

这可能已经确定了代码中的一些问题

  • 阅读一本关于C的好书,并在手册页面中查找各个函数(例如,在*nix系统上,尝试键入
    man 2 printf
    。您也可以将其输入google并查找这些页面的web版本)


    • 整个代码有许多错误:

      • 您尝试使用
        %s
        打印单个字符,该字符用于字符串。这会导致未定义行为——单个字符的正确转换为
        %c
      • 循环直到某个“数字字符”,如
        '3'
        。您希望循环直到数字
        3
        。减去
        '0'
        即可
      • 执行
        scanf(“%s”,…)
        是潜在的未定义行为,它最终将溢出任何缓冲区。您可能需要读取我的。简而言之,至少添加一个字段宽度,在您的情况下
        scanf(“%99s”,…)
      • scanf()
        需要一个指向数据放置位置的指针,但
        str
        的计算结果已经是指向第一个数组元素的指针。因此,在此处添加
        &
        错误的,导致更多未定义的行为
      • 始终检查可能失败的函数的返回值。如果
        scanf()
        未能转换某些内容,则
        str
        保持未初始化状态,并且以下
        strlen()
        未定义行为
      • 您的代码使用ASCII值,这是非常常见的,但不是强制性的;这样,它在不使用ASCII的机器上就不起作用
      您甚至不需要使用缓冲区来实现所需的功能,只需一个字符即可保存最后读取的字符,如下所示(其他问题在本例中也已解决):

      这可能已经确定了代码中的一些问题

    • 阅读一本关于C的好书,并在手册页面中查找各个函数(例如,在*nix系统上,尝试键入
      man 2 printf
      。您也可以将其输入google并查找这些页面的web版本)


      • 您可以遵循此代码。可能会对您有所帮助。它与您的代码类似

        #include<stdio.h>
        #include<conio.h>
        #include<string.h>
        int main()
        {
        char str[100],ch;
        int i,len,s,pos,k;
        scanf("%s", &str);
        len=strlen(str);
        int number=0;
        for(i=0; i<len; i++)
        {
            if((str[i]>='a' && str[i]<='z') || (str[i]>='A' && str[i]<='Z'))
            {
                for(k=0;k<number;k++)
                {
                    printf("%c",ch);
                }
                ch=str[i];
                number=0;
            }
            else
            {
                number=number*10+(str[i]-'0');
            }
        }
        for(k=0;k<number;k++)
        {
            printf("%c",ch);
        }
        printf("\n");
        
        #包括
        #包括
        #包括
        int main()
        {
        char-str[100],ch;
        内部i、长度s、位置k;
        scanf(“%s”和&str);
        len=strlen(str);
        整数=0;
        
        对于(i=0;i='a'&&str[i]='a'&&str[i]您可以遵循此代码。可能会对您有所帮助。它与您的代码类似

        #include<stdio.h>
        #include<conio.h>
        #include<string.h>
        int main()
        {
        char str[100],ch;
        int i,len,s,pos,k;
        scanf("%s", &str);
        len=strlen(str);
        int number=0;
        for(i=0; i<len; i++)
        {
            if((str[i]>='a' && str[i]<='z') || (str[i]>='A' && str[i]<='Z'))
            {
                for(k=0;k<number;k++)
                {
                    printf("%c",ch);
                }
                ch=str[i];
                number=0;
            }
            else
            {
                number=number*10+(str[i]-'0');
            }
        }
        for(k=0;k<number;k++)
        {
            printf("%c",ch);
        }
        printf("\n");
        
        #包括
        #包括
        #包括
        int main()
        {
        char-str[100],ch;
        内部i、长度s、位置k;
        scanf(“%s”和&str);
        len=strlen(str);
        整数=0;
        对于(i=0;i='a'&&str[i]='a'&&str[i]
        ,包括
        #包括
        int main()
        {
        char-str[100];
        int i=0,s;
        scanf(“%s”,str);
        while(str[i]!='\0')
        { 
        如果(str[i]>='a'&&str[i]='a'&&str[i]='0'&&str[i]
        ,则包括
        #包括
        int main()
        {
        char-str[100];
        int i=0,s;
        scanf(“%s”,str);
        while(str[i]!='\0')
        { 
        如果(str[i]>='a'&&str[i]='a'&&str[i]='0'&&str[i],下面是一个简单的代码:

        #include <stdio.h>
        #include <stdlib.h>
        #include<string.h>
        #define MAX 50
        void main()
        {
            char name[MAX],str1[MAX],str3[MAX];
            int str2[MAX],i,j,m,t=0;
            printf("Enter name: ");
            scanf("%s", name);
            printf("Your name is %s.", name);
            for(j=0,i=0;name[i]!='\0';i=i+2,j++)
            {
                str1[j]=name[i];
                str2[j]=name[i+1]-'0';
            }
            for(i=0;i<=strlen(str1);i++)
            {
                for(j=str2[i];j>0;j--)
                {
                    str3[t]=str1[i];
                    printf("%c",str3[t]);
                    t++;
                }
        
            }
        }
        
        #包括
        #包括
        #包括
        #定义最大值50
        void main()
        {
        字符名[MAX]、str1[MAX]、str3[MAX];
        int str2[MAX],i,j,m,t=0;
        printf(“输入名称:”);
        scanf(“%s”,名称);
        printf(“您的名字是%s.”,name);
        对于(j=0,i=0;名称[i]!='\0';i=i+2,j++)
        {
        str1[j]=名称[i];
        str2[j]=名称[i+1]-“0”;
        }
        对于(i=0;i0;j--)
        {
        str3[t]=str1[i];
        printf(“%c”,str3[t]);
        t++;
        }
        }
        }
        
        以下是一个简单的代码:

        #include <stdio.h>
        #include <stdlib.h>
        #include<string.h>
        #define MAX 50
        void main()
        {
            char name[MAX],str1[MAX],str3[MAX];
            int str2[MAX],i,j,m,t=0;
            printf("Enter name: ");
            scanf("%s", name);
            printf("Your name is %s.", name);
            for(j=0,i=0;name[i]!='\0';i=i+2,j++)
            {
                str1[j]=name[i];
                str2[j]=name[i+1]-'0';
            }
            for(i=0;i<=strlen(str1);i++)
            {
                for(j=str2[i];j>0;j--)
                {
                    str3[t]=str1[i];
                    printf("%c",str3[t]);
                    t++;
                }
        
            }
        }
        
        #包括
        #包括
        #包括
        #定义最大值50
        void main()
        {
        字符名[MAX]、str1[MAX]、str3[MAX];
        int str2[MAX],i,j,m,t=0;
        printf(“输入名称:”);
        scanf(“%s”,名称);
        printf(“您的名字是%s.”,name);
        对于(j=0,i=0;名称[i]!='\0';i=i+2,j++)
        {
        str1[j]=名称[i];
        str2[j]=名称[i+1]-“0”;
        }
        对于(i=0;i0;j--)
        {
        str3[t]=str1[i];
        printf(“%c”,str3[t]);
        t++;
        }
        }
        }
        
        试试这个简单的代码

        #include<stdio.h>
        #include<string.h>
        
        int main() {
           char str[50];
            int i=0,j,k,c;
            printf("Enter  String :  ");
            scanf("%s",&str);
            for(i=0;i<strlen(str);) {
                for(j=0;j<str[i+1]-'0';j++) {
                    printf("%c",str[i]);
                }
            i=i+2;
            }
        }
        
        #包括
        #包括
        int main(){
        恰恰
        
        #include<stdio.h>
        int main()
        {
        char str[200] , ch;
        int ind , count;
        scanf("%s" , str);
        int len , start;
        for(len=0 ; str[len] ; len++);
        start=len ;
        ind=count=0;
        while( ind < len )
        {
            ch = str[ind++];
            while(str[ind] >= '0' && str[ind] <= '9' )
                count = count * 10 + (str[ind++] - '0');
            while(count)
            {
                str[start++] = ch;
                count--;
            }
        }
        for(ind=len ;ind < start ;ind++)
            str[ind - len]=str[ind];
        str[ind - len] = 0;
        printf("%s" , str);
        return 0;
        }