【问题标题】:Strcat(a[1],"22") how to use? C programmingstrcat(a[1],"22") 怎么用? C 编程
【发布时间】:2015-01-30 14:55:20
【问题描述】:

我正在尝试制作一个程序,如果前一个字母与将输出的当前字母相同,则会在它们之间放置一个空格...

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define T 100
#define S 255

int main(){
char Arrayinput[T][S];
char Arrayoutput[T][S*5];
int i, c, x;
for(i=0;i<T;i++){
    for(c=0;c<S*5;c++){
        Arrayoutput[i][c]=0;
    }
}
scanf("%d", &x);
getchar();
for(i=0;i<x;i++){
        gets(Arrayinput[i]);
}
for(i=0;i<x;i++){
    for(c=0;c<strlen(Arrayinput[i]);c++){
            switch(toupper(Arrayinput[i][c])){
            case 'A':
                if(Arrayoutput[i][c-1]=='2')
                    strcat(Arrayoutput[i]," ");
                strcat(Arrayoutput[i],"2"); break;
            case 'B':
                if(Arrayoutput[i][c-1]=='2')
                    strcat(Arrayoutput[i]," ");
                strcat(Arrayoutput[i],"22"); break;
            case 'C':
                if(Arrayoutput[i][c-1]=='2')
                    strcat(Arrayoutput[i]," ");
                strcat(Arrayoutput[i],"222"); break;
}    }    }

for(i=0;i<x;i++){
    printf("case #%d:%s\n",i+1,Arrayoutput[i]);
}

system("pause");
return 0;

对于某些情况..

如果我输入.. bca 它输出 22 222 2 这是正确的.. 如 出租车 = 222 22 2 bac = 22 2 222

但是每当我输入 abc 它输出... 2 22222... 我不知道为什么... 请帮忙?

【问题讨论】:

  • 我还把arrayoutput[][]的所有元素都设为0,所以里面不会有垃圾数据。
  • 请编辑您的问题以包括ArrayInputArrayOutput 的声明,以及您如何初始化它们。
  • 发布MCVE。如果您了解strcat() 如何从其文档中工作,您可能也希望将其包含在您的问题中。
  • Arrayoutput[i][c-1] --&gt; Arrayoutput[0][-1] for c=0你知道吗?
  • 另外,学习使用调试器,然后你可以逐行逐行查看代码,帮助自己找到问题。

标签: c strcat


【解决方案1】:

仅仅是因为 if(Arrayoutput[i][c-1]=='2') 的 'C' 大小写与输入 abc 将始终检查 c-1 位置,即始终为“”。

  • 案例 A -> “2”
  • 案例 B -> “2 22”
  • case C -> Arrayoutput[i][c-1]Arrayoutput[i][1] 这是一个 空格,然后在字符串末尾不添加空格

试试这个

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define T 100
#define S 255

int main(){
char Arrayinput[T][S];
char Arrayoutput[T][S*5];
int i, c, x;
int len;
for(i=0;i<T;i++){
    for(c=0;c<S*5;c++){
        Arrayoutput[i][c]=0;
    }
}
scanf("%d", &x);
getchar();
for(i=0;i<x;i++){
        gets(Arrayinput[i]);
}
for(i=0;i<x;i++){
    for(c=0;c<strlen(Arrayinput[i]);c++){
        len = strlen(Arrayoutput[i]);
            switch(toupper(Arrayinput[i][c])){
            case 'A':
                if((len != 0) && (Arrayoutput[i][len-1]=='2'))
                    strcat(Arrayoutput[i]," ");
                strcat(Arrayoutput[i],"2"); break;
            case 'B':
                if((len != 0) && (Arrayoutput[i][len-1]=='2'))
                    strcat(Arrayoutput[i]," ");
                strcat(Arrayoutput[i],"22"); break;
            case 'C':
                if((len != 0) && (Arrayoutput[i][len-1]=='2'))
                    strcat(Arrayoutput[i]," ");
                strcat(Arrayoutput[i],"222"); break;
}    }    }

for(i=0;i<x;i++){
    printf("case #%d:%s\n",i+1,Arrayoutput[i]);
}

return 0;
}

输出

【讨论】:

  • 你试过代码了吗?因为...它确实让我心动.. abc 应该是 = 2 22 222 但打印输出 2 22222 和其他打印正常.. 为什么这就是全部,严重.. 是的,如果它不是“2”,它就不会放,但为什么它不应该通过 abc=2 22222,因为它应该是我想要的吗?
  • 发布的代码可以根据您的需要工作。 abc = 2 22 222. 在 Debian 上编译的 gcc 4.7.2
  • 我编辑了我的答案。你必须一步一步地思考。正如编辑的那样,第三次检查检查字符串的第二个字符“2 22”。然后如果'C'评估不是=='2'的空格,则在添加“222”之前的字符串中添加没有空格
  • 我确实找到了另一种方法.. 虽然.. 只是立即打印它们。
  • 您的问题是要解释为什么您的代码无法正常工作。我做到了,并更正了您的代码。使用不同的算法获得相同的输出是另一回事,因为您的代码有 1000k 错误的东西......
猜你喜欢
  • 2015-11-29
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 2011-04-05
  • 2014-06-21
相关资源
最近更新 更多