用 C 中的字符串替换整数
replacing integers with strings in C
我编写的代码将 0
到 3
的整数替换为 strings
。我只被允许使用 getchar()
和 putchar()
。如果 input
是 1
,输出将变成 "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;
}
我只是给出了提示,使其通用化,例如输入小于零时编写条件等。希望对您有所帮助。
我编写的代码将 0
到 3
的整数替换为 strings
。我只被允许使用 getchar()
和 putchar()
。如果 input
是 1
,输出将变成 "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;
}
我只是给出了提示,使其通用化,例如输入小于零时编写条件等。希望对您有所帮助。