字符串中的冗余字符,c

时间:2014-03-15 21:12:25

标签: c string

我正在尝试将选定的字符从一个字符串转换为另一个字符串。一切看起来都没问题,除了程序不断向输出中添加其他字符。似乎它往往会增加不同数量的这些“不必要的”角色。问题可能在哪里?

int main(void) {
    int i,j=0;
    char string[256];
    char second_arr[256];
    scanf("%255s", string);

    for(i=0;i<256;i++){
        if(string[i]=='('||string[i]=='['||string[i]=='{'){
            second_arr[j]=string[i];
            j++;
        }
    }
    printf("%s", second_arr);
}

说,

input: (hello)(}[} --->
Output:(([[H

4 个答案:

答案 0 :(得分:2)

问题1:您没有因为失败而对scanf进行测试。它可以返回EOF或零,表示输入与您的格式字符串不匹配。

问题2:即使用户输入的数量较少,您也会复制所有256个字符,这意味着您正在复制垃圾。

问题3:您没有向second_arr添加空终止符。

这样做:

if (scanf("%255s", string) != 1)
{
    printf("scanf failed\n");
    return 1;
}

for (i = 0; i < 256 && string[i]; i++) {
    if(string[i]=='('||string[i]=='['||string[i]=='{'){
        second_arr[j]=string[i];
        j++;
    }
}
second_arr[j] = '\0';
printf("%s", second_arr);
return 0;

答案 1 :(得分:1)

试试这个:

for (i=0; string[i]!=0; i++) // iterate the input string until the null-character
{
    if (string[i] == '(' || string[i] == '[' || string[i] == '{')
        second_arr[j++] = string[i];
}
second_arr[j] = 0; // set a null-character at the end of the output string

答案 2 :(得分:0)

没有什么可以终止第二个字符串。添加

||string[i]=='\0'

根据你的条件。当你看到null char时也会跳出循环,但只有在你复制它之后。

答案 3 :(得分:-1)

您应该在第二个字符串second_arr的末尾添加字符'\n'以表明其结束。