在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;
}