繁体   English   中英

为什么第二个 for 循环中的赋值 j = i +1 不能正常工作

[英]why the value assignment j = i +1 in the second for loop doesn't work correctly

我得到了这个奇怪的行为:在下面for循环中,我会在字符串文本中找到相同的字符并将它们收集在一起(例如“bdsabgs”->“bbssdga”)。 我遇到的问题是在第二个for循环中,在i = 1的第二次迭代中,值j不是从 2 开始,而是从一些可笑的值(例如 2860)开始。 谁能解释我为什么以及可能的解决方案? 先感谢您!

    for (int i = 0; text[i+1] != '/0'; i++)
    {
         for (int j = i + 1; text[j] != '/0'; j++)
         {            
                if (text[i] == text[j])
                {
                    temp = text[j];
                    text[j] = text[i + 1];
                    text[i + 1] = temp;

                    break;

                }
          }


     }

好的,您的代码中有一些问题。

这有效:

int main()
{
    char text[20]="bdsabgs";
    char temp;
    for (int i = 0; text[i+1] != '\0'; i++)
    {
         for (int j = i + 1; text[j] != '\0'; j++)
         {            
                if (text[i] == text[j])
                {
                    temp = text[j];
                    text[j] = text[i + 1];
                    text[i + 1] = temp;

                    break;

                }
          }
     }
    printf("%s\n", text);

    return 0;
}

结果:bbssdga

顺便说一句,在可能不满足终止条件的情况下运行循环并不是一个好习惯。 我建议您使用while {…}并同时使用'\0'sizeof(text)作为终止条件,或者先在 text 上运行strlen并使用它。

您的/0符号是错误的。 它应该是\0 ,然后一切都应该按预期工作:

#include <stdio.h>

int main()
{
    char text[] = "this is my text";
    int i,j,temp;
    for (i = 0; text[i+1] != '\0'; i++) {
         for (j = i + 1; text[j] != '\0'; j++) {            
                if (text[i] == text[j]) {
                    temp = text[j];
                    text[j] = text[i + 1];
                    text[i + 1] = temp;
                    break;
                }
          }
     }
     printf("my text: %s", text);
     return 0;
}

Output: my text: tttssii mhexy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM