输入: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;
}