在多个字符串的偶数和奇数位置打印字符

时间:2016-10-18 16:44:23

标签: c

我正在尝试使用 c 程序在偶数和奇数位置打印给定字符串的字符。我的程序工作正常,如果只有一个字符串,但它不适用于包含多个字符串的句子。以下代码只打印输入的第二个字符串,但它不会在偶数和奇数位置打印字符,因为它正在做对于第一个字符串。

int main() 
{
char string[10], even[10], odd[10], i, j, k,count;

i = j = k = count = 0;

    do
    {
    printf("Enter your input string:");
    fgets(string, 10, stdin);
    string[strlen(string) - 1] = '\0';

    /* printing the input string */
    printf("Given Input string:%s\n", string);

        while (string[i] != '\0')
        {
            if (i % 2 == 0) {
            odd[j++] = string[i];
            }
            else {
            even[k++] = string[i];
            }
        i++;
        }
    /*  terminating even and odd string with NULL */
    odd[j] = even[k] = '\0';

    /* print the characters at odd position and even positions */
    printf(" %s %s", odd,even);

    odd[0]=even[0]='\0';
    count++;
    }while(count<2);
return 0;
}

执行时,当我输入第一个字符串为“united”时,它打印出“uie”表示奇数位置,“ntd”表示偶数位置。然后我被提示输入我输入的第二个字符串作为“状态”但没有打印出来,除了输入的字符串和程序退出。它没有像第一个字符串那样输出。 请帮我指出我的错误,以便我的代码可以正常工作任意数量的字符串,而不仅仅是第一个字符串,即它应该输出用户输入的所有字符串的偶数和奇数位置的字符。

2 个答案:

答案 0 :(得分:3)

您将自己局限于C语言的古老版本,该语法要求所有局部变量在任何可执行语句之前在块的顶部声明。

由于您的代码不使用count / do循环之外的while以外的变量,因此您应该在循环内移动它们的声明。这将确保变量在每次迭代开始时具有适当的初始值。

请注意以下几点:

  • 如果最终用户在Windows上终止输入流( Ctrl + Z Ctrl + <),您的代码将导致未定义的行为在UNIX上没有输入任何字符的kbd> D
  • 当最终用户在输入少于10个字符后终止输入流时,您的代码将删除最后一个字符
  • odd[0]=even[0]='\0'是不必要的

答案 1 :(得分:-1)

使用namespace std;

struct str
{
    char s[10000];
};

int main() {

    int T;
    cin >> T;
    fflush(stdin);
    str s1[10];
    while (T--) {
        cin >> s1[T].s;
        fflush(stdin);

        int j = 0;
        while (j < strlen(s1[T].s)) {
            if (j % 2 == 0)
                cout << s1[T].s[j];
            ++j;
        }
        cout << " ";
        int k = 0;
        while (k < strlen(s1[T].s)) {
            if (k % 2 == 1)
                cout << s1[T].s[k];
            ++k;
        }
        cout << endl;
    }
    return 0;
}