用 C 中的字符串替换整数

replacing integers with strings in C

我编写的代码将 03 的整数替换为 strings。我只被允许使用 getchar()putchar()。如果 input1,输出将变成 "one".

#include <stdio.h>

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

        while ((c = getchar ()) != EOF) 
        {
            if(c==0+'0') {
                char* str = arr[0];
                for (i = 0; str[i] != '[=10=]'; i++) {
                    putchar(str[i]);
                }
            }
            else if(c==1+'0') {
                char* str = arr[1];
                for (i= 0; str[i] != '[=10=]';i++) {
                    putchar(str[i]);
                }
            }
            else if(c==2+'0') {
                char* str = arr[2];
                for (i = 0; str[i] != '[=10=]'; i++) {
                    putchar(str[i]);
                }
            }
            else if(c==3+'0') {
                char* str = arr[3];
                for (i = 0; str[i] != '[=10=]'; i++) {
                    putchar(str[i]);
                }   
            }
            else
                putchar(c);
   }

return 0;
}

code 很长。有没有更短的写法?

如果我输入 33,输出将是 "threethree"。谁能给我建议我怎样才能修改我的代码不这样做?

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

您可以像这样使用一个 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] != '[=10=]';i++) {
                putchar(str[i]);
            }
        }
        else {
            putchar(c);
        }
    }
return 0;
}

你可以使用一个变量来记住最后一次输入并进行比较,这样你就不会打印连续的字符。

#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] != '[=10=]'; i++) {
                putchar(str[i]);
            }
        }
        else{
            putchar(c);
        }

    }
    return 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] != '[=10=]'; i++)
                {
                    putchar(str[i]);
                }
                j = 10; // just to detect processed character
                break;
            }
        }
        if(j != 10)
        {
            putchar(c);
        }
    }
    return 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;
}

我只是给出了提示,使其通用化,例如输入小于零时编写条件等。希望对您有所帮助。