在没有库函数的情况下反转字符串
Reversing the string without library function
代码编译成功。
但我无法反转字符串。
由于我是初级程序员,我真的无法弄清楚我犯的错误。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int temp, i, j, length;
char name[20], name1[20];
printf(" Enter string \n");
scanf("%s", name);
length = strlen(name);
printf(" %d", length);
for (i = length - 1; i >= 0; i--) {
name1[length - i] = name[i];
}
printf("%S ", name1);
return 0;
}
在打印中使用小写's':
printf("%s ",name1);
相似代码:https://www.programmingsimplified.com/c-program-reverse-string
我注意到的问题:
length-i
将在此处关闭 +1:
name1[length-i]=name[i];
- 您忘记添加空终止符 (
[=13=]
)。
%S
是一个非标准的 printf
格式化程序。你可能想要 %s
.
建议的更改:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char name[20], name1[20];
printf(" Enter string \n");
if(scanf("%19s", name) != 1) { /* check that input works */
fprintf(stderr, "input failure\n");
return 1;
}
int length = strlen(name);
printf(" %d\n", length);
for(int i = 0; i < length; ++i) {
name1[length - i - 1] = name[i]; /* corrected indexing */
}
name1[length] = '[=11=]'; /* add null terminator */
printf("%s\n", name1); /* %s instead of %S */
}
你可以试试这个:-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i, length;
char name[20], temp;
printf(" Enter string \n");
scanf("%s", name);
length = strlen(name);
printf(" %d", length);
for(i = 0; i < length /2; i++)
{
temp = name[i];
name[i] = name[length-i-1];
name[length-i-1] = temp;
}
printf("\n%s", name);
return 0;
}
您的代码中存在一些问题:
您应该使用 %19s
限制存储到 name
中的字符数。
name1[length - i] = name[i];
没有使用正确的偏移量。尝试第一次迭代:i
是 length-1
您将最后一个字符复制到位置 length - (length - 1)
,因此位置 1
而不是 0
。改用这个:
name1[length - i - 1] = name[i];
你必须在反转字符串的末尾设置一个空终止符:
name1[length] = '[=11=]';
在printf()
调用中,%S
不正确。请改用 %s
并附加一个换行符。
这是修改后的版本:
#include <stdio.h>
int main() {
char name[20], name1[20];
int i, length;
printf(" Enter string:\n");
if (scanf("%19s", name) == 1) {
length = strlen(name);
printf("%d\n", length);
for (i = 0; i < length; i++) {
name1[length - i - 1] = name[i];
}
name1[length] = '[=12=]';
printf("%s\n", name1);
}
return 0;
}
代码编译成功。 但我无法反转字符串。 由于我是初级程序员,我真的无法弄清楚我犯的错误。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int temp, i, j, length;
char name[20], name1[20];
printf(" Enter string \n");
scanf("%s", name);
length = strlen(name);
printf(" %d", length);
for (i = length - 1; i >= 0; i--) {
name1[length - i] = name[i];
}
printf("%S ", name1);
return 0;
}
在打印中使用小写's':
printf("%s ",name1);
相似代码:https://www.programmingsimplified.com/c-program-reverse-string
我注意到的问题:
length-i
将在此处关闭 +1:name1[length-i]=name[i];
- 您忘记添加空终止符 (
[=13=]
)。 %S
是一个非标准的printf
格式化程序。你可能想要%s
.
建议的更改:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char name[20], name1[20];
printf(" Enter string \n");
if(scanf("%19s", name) != 1) { /* check that input works */
fprintf(stderr, "input failure\n");
return 1;
}
int length = strlen(name);
printf(" %d\n", length);
for(int i = 0; i < length; ++i) {
name1[length - i - 1] = name[i]; /* corrected indexing */
}
name1[length] = '[=11=]'; /* add null terminator */
printf("%s\n", name1); /* %s instead of %S */
}
你可以试试这个:-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i, length;
char name[20], temp;
printf(" Enter string \n");
scanf("%s", name);
length = strlen(name);
printf(" %d", length);
for(i = 0; i < length /2; i++)
{
temp = name[i];
name[i] = name[length-i-1];
name[length-i-1] = temp;
}
printf("\n%s", name);
return 0;
}
您的代码中存在一些问题:
您应该使用
%19s
限制存储到name
中的字符数。name1[length - i] = name[i];
没有使用正确的偏移量。尝试第一次迭代:i
是length-1
您将最后一个字符复制到位置length - (length - 1)
,因此位置1
而不是0
。改用这个:name1[length - i - 1] = name[i];
你必须在反转字符串的末尾设置一个空终止符:
name1[length] = '[=11=]';
在
printf()
调用中,%S
不正确。请改用%s
并附加一个换行符。
这是修改后的版本:
#include <stdio.h>
int main() {
char name[20], name1[20];
int i, length;
printf(" Enter string:\n");
if (scanf("%19s", name) == 1) {
length = strlen(name);
printf("%d\n", length);
for (i = 0; i < length; i++) {
name1[length - i - 1] = name[i];
}
name1[length] = '[=12=]';
printf("%s\n", name1);
}
return 0;
}