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

C 在多个字符串的偶数和奇数位置打印字符,c,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:"); f

我试图使用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;
}
intmain()
{
字符串[10],偶数[10],奇数[10],i,j,k,count;
i=j=k=count=0;
做
{
printf(“输入您的输入字符串:”);
fgets(字符串,10,标准输入);
字符串[strlen(string)-1]='\0';
/*打印输入字符串*/
printf(“给定输入字符串:%s\n”,字符串);
while(字符串[i]!='\0')
{
如果(i%2==0){
奇数[j++]=字符串[i];
}
否则{
偶数[k++]=string[i];
}
i++;
}
/*用NULL终止偶数和奇数字符串*/
奇数[j]=偶数[k]='\0';
/*在奇数和偶数位置打印字符*/
printf(“%s%s”,奇数、偶数);
奇数[0]=偶数[0]='\0';
计数++;

}而(count您将自己限制为C语法的一个古老版本,它要求在任何可执行语句之前在块的顶部声明所有局部变量

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

这里还有几点需要记住:

  • 如果最终用户在不输入任何字符的情况下终止输入流(Windows上为Ctrl+Z,UNIX上为Ctrl+D),则代码将导致未定义的行为
  • 当最终用户在输入少于十个字符后终止输入流时,代码将删除最后一个字符
  • 奇数[0]=偶数[0]='\0'
    是不必要的

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

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

这里还有几点需要记住:

  • 如果最终用户在不输入任何字符的情况下终止输入流(Windows上为Ctrl+Z,UNIX上为Ctrl+D),则代码将导致未定义的行为
  • 当最终用户在输入少于十个字符后终止输入流时,代码将删除最后一个字符
  • 奇数[0]=偶数[0]='\0'
    是不必要的
使用名称空间标准

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;
}
结构str { chars[10000]; }; int main(){ int T; cin>>T; fflush(stdin); strs1[10]; 而(T--){ cin>>s1[T].s; fflush(stdin); int j=0; 而(j
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;
}
结构str { chars[10000]; }; int main(){ int T; cin>>T; fflush(stdin); strs1[10]; 而(T--){ cin>>s1[T].s; fflush(stdin); int j=0; 而(j你忘了重置局部变量了吗。
i
j
k
没有被重置为0。是的,我现在意识到了我的错误。我已经修复了,现在正在工作。非常感谢!正确格式化/缩进你的代码。
string[strlen(string)-1]='\0';
这就是一些人所说的cargo cult编程。你能详细解释一下这行的作用吗?你忘了重置局部变量。
i
j
k
没有被重置为0。是的,我现在意识到了我的错误。我已经修复了,它正在工作。非常感谢你!格式化/缩进你的代码正确。
string[strlen(string)-1]='\0';
这就是一些人所说的cargo cult编程。你能详细解释一下这行的功能吗?谢谢你的宝贵建议。谢谢你的宝贵建议。