在C中用字符串替换整数

在C中用字符串替换整数,c,arrays,getchar,C,Arrays,Getchar,我编写的代码将0到3的整数替换为字符串。我只允许使用getchar()和putchar()。如果输入为1,则输出将变为“一” #包括 int main() { INTC; char*arr[4]={“零”、“一”、“二”、“三”}; int i; 而((c=getchar())!=EOF) { 如果(c==0+'0'){ char*str=arr[0]; 对于(i=0;str[i]!='\0';i++){ putchar(str[i]); } } else如果(c==1+'0'){ char*s

我编写的代码将
0
3
的整数替换为
字符串
。我只允许使用
getchar()
putchar()
。如果
输入
1
,则输出将变为
“一”

#包括
int main()
{
INTC;
char*arr[4]={“零”、“一”、“二”、“三”};
int i;
而((c=getchar())!=EOF)
{
如果(c==0+'0'){
char*str=arr[0];
对于(i=0;str[i]!='\0';i++){
putchar(str[i]);
}
}
else如果(c==1+'0'){
char*str=arr[1];
对于(i=0;str[i]!='\0';i++){
putchar(str[i]);
}
}
else如果(c==2+'0'){
char*str=arr[2];
对于(i=0;str[i]!='\0';i++){
putchar(str[i]);
}
}
else如果(c==3+'0'){
char*str=arr[3];
对于(i=0;str[i]!='\0';i++){
putchar(str[i]);
}   
}
其他的
普查尔(c);
}
返回0;
}
代码相当长。有没有较短的书写方法

如果我输入
33
,输出将是
“Three Three”
。有人能给我一些建议吗?我如何修改我的代码以避免这样做


注意:我也不允许使用函数。

您可以使用如下一种if条件压缩if语句:

#include <stdio.h>

int main()
{
    int c;            
    char* arr[4] = {"zero", "one", "two","three"};
    int i;

    while ((c = getchar ()) != EOF) {
    int k = c-'0';
        if(k>=0 && k<=3) {
            char* str = arr[k];
            for (i= 0; str[i] != '\0';i++) {
                putchar(str[i]);
            }
        }
        else {
            putchar(c);
        }
    }
return 0;
}
#包括
int main()
{
INTC;
char*arr[4]={“零”、“一”、“二”、“三”};
int i;
而((c=getchar())!=EOF){
int k=c-'0';

如果(k>=0&&k,您可以使用一个变量来记住上次输入并进行比较,这样您就不会打印连续字符

#include <stdio.h>

int main()
{
    int c;
    char* arr[4] = {"zero", "one", "two","three"};
    int i;
    char last_input = '9';

    while ((c = getchar ()) != EOF)
    {
        if(c != last_input && '0' <= c  && c <= '3') {
            last_input = c;
            int index = c - '0';
            char* str = arr[index];
            for (i = 0; str[i] != '\0'; i++) {
                putchar(str[i]);
            }
        }
        else{
            putchar(c);
        }

    }
    return 0;
}
#包括
int main()
{
INTC;
char*arr[4]={“零”、“一”、“二”、“三”};
int i;
char last_输入='9';
而((c=getchar())!=EOF)
{

如果(c!=last_input&&“0”这里我的代码使用循环来缩短代码

#include <stdio.h>

int main()
{
    int c;            
    char* arr[4] = {"zero", "one", "two","three"};
    int i, j;

    while ((c = getchar ()) != EOF) 
    {
        for(j = 0; j < 4; j++)
        {
            if(c == j + '0')
            {
                char* str = arr[j];
                for (i = 0; str[i] != '\0'; i++)
                {
                    putchar(str[i]);
                }
                j = 10; // just to detect processed character
                break;
            }
        }
        if(j != 10)
        {
            putchar(c);
        }
    }
    return 0;
}
#包括
int main()
{
INTC;
char*arr[4]={“零”、“一”、“二”、“三”};
int i,j;
而((c=getchar())!=EOF)
{
对于(j=0;j<4;j++)
{
如果(c==j+'0')
{
char*str=arr[j];
对于(i=0;str[i]!='\0';i++)
{
putchar(str[i]);
}
j=10;//仅用于检测已处理的字符
打破
}
}
如果(j!=10)
{
普查尔(c);
}
}
返回0;
}

以下是完成相同任务的简单方法。我试图在注释中解释逻辑

int main(void) {
        char *arr[11] = {"zero", "one", "two","three","four","five","six","seven","eight","Nine","Ten"};
        int *input = malloc(sizeof(*input))/*1st time 4 byte */ , row = 1;
        while( (input[row-1] = getchar())!=EOF ) {

                if(input[row-1]==10) /* if ENTER key is presed */
                        break;
                input[row-1] = input[row-1] - 48;/* convert it */
                printf("%s ",arr[ input[row-1]%10 ]);/* its simple, just think on it */
                row++;
                input = realloc(input,row * sizeof(*input));/* reallocate based on number of input */
        }
        /* free dynamically allocated memory @TODO*/
        return 0;
}

我只是给出了一个提示,让它像写输入小于零的条件一样通用。我希望它能有所帮助。

你的代码将有
分段错误
,因为“\n”将通过
getchar
,而“\n”-“0”是-38,这会导致数组溢出。谢谢,我不太明白为什么你要减去c-“0”,如果我写11,它将打印出来“oneone”c-“0”将给出我们要从中检索字符串的索引,@makoto 11应该给oneone正确的答案?即使您的代码也将11的输出作为oneone谢谢您,但为什么最后一个输入是“9”?如果输入是1,它似乎只工作一次输出将变为“1”"但是,如果我再次键入,输出将是1,这不是您在问题中想要的吗?@Makoto最后一次输入“9”可以是除0到3之外的任何值。我只是初始化它。您也不能初始化它。哦,对不起,如果我键入11,则输出应该是一个而不是11。输入类似于
5417
并检查谢谢您的答复但是我不允许ise printf或scanf only getchar和Putchar对不起,我帮不了你。总之
Putchar()
意味着你没有存储在任何地方,只是在
stdout
上打印然后就消失了。这有什么用呢?无论如何,在我的代码中,你可以用
Putchar()
替换
是否允许使用?不允许使用malloc,但非常感谢您花时间帮助我
int main(void) {
        char *arr[11] = {"zero", "one", "two","three","four","five","six","seven","eight","Nine","Ten"};
        int *input = malloc(sizeof(*input))/*1st time 4 byte */ , row = 1;
        while( (input[row-1] = getchar())!=EOF ) {

                if(input[row-1]==10) /* if ENTER key is presed */
                        break;
                input[row-1] = input[row-1] - 48;/* convert it */
                printf("%s ",arr[ input[row-1]%10 ]);/* its simple, just think on it */
                row++;
                input = realloc(input,row * sizeof(*input));/* reallocate based on number of input */
        }
        /* free dynamically allocated memory @TODO*/
        return 0;
}