[英]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.