这是一个在C中反转字符串的简单代码,最后一个printf语句打印相反的顺序,但最后有一个问号,而我只是想打印反向字符串而不是问号 我该如何解决?
stk
输入:abcd
输出: original_number = abcd
d
C
B'/ P>
一
rev_number = dcba?
答案 0 :(得分:4)
你需要null终止你的字符串。 在你反向字符串的for循环之后添加这一行。
new_string[i]='\0';
for(i = 0; i<=l; i++){
new_string[i] = string[l-i];
printf("%c\n",new_string[i]);
}
new_string[i]='\0'; // add this
printf("rev_number = %s\n",new_string);
答案 1 :(得分:0)
如果问题是&#34;如何添加&#39;?&#39;到字符串的末尾?&#34;我得回答:
1)使用strcat
添加一个字符,例如:
#include<stdio.h>
#include<string.h>
int main(){
char new_string[101] = {0}; // +1 to be sure that enough place for '?' will be available
// {0} to init empty string
char string[100];
scanf("%s", string);
printf("original_number = %s\n", string);
int i;
int l = strlen(string) - 1;
for (i = 0; i <= l; i++){
new_string[i] = string[l - i];
printf("%c\n", new_string[i]);
}
strcat(new_string, "?");
printf("rev_number = %s\n", new_string);
}
2)放置?
并在循环结束后添加字符\0
,例如:
#include<stdio.h>
#include<string.h>
int main(){
char new_string[101]; // +1 to be sure in place for '?'
char string[100];
scanf("%s", string);
printf("original_number = %s\n", string);
int i;
int l = strlen(string) - 1;
for (i = 0; i <= l; i++){
new_string[i] = string[l - i];
printf("%c\n", new_string[i]);
}
// add one more char
new_string[i] = '?';
// set the string end
new_string[i + 1] = '\0';
printf("rev_number = %s\n", new_string);
}
请注意,如果您使用0
作为char new_string[101] = {0};
填充所有数组,则无需使用new_string[i + 1] = '\0';
添加字符串结尾,因此第二个变体可以更短初始化与第一个一样
对于两个片段,我都有相同的输出
<强>更新强>
关于使用字符串的另一个建议。当使用scanf
输入并且您知道可以在字符数组中存储多少字符时,请使用以下方法来防止违反数组边界
char string[10]; // if you have 10 bytes
scanf("%9s", string); // ask not more than 9 characters
请记住,对于&#39; \ 0&#39;还需要一个字节。 (null终止符)。
答案 2 :(得分:0)
通过new_string [i] =&#39; \ 0&#39;终止new_string在for-loop之后
答案 3 :(得分:-1)
问题是你把“字符串结束”作为for循环中的最后一个输入。你不需要变量“l”。你可以做那样的想法
int main()
{
char new_string[100];
char string1[100];
scanf("%s",string1);
printf("original_number = %s\n",string1);
int i;
for(i = 0; i<=strlen(string1); i++){
new_string[i] = string1[i-1];
printf("%c\n",new_string[i]);
}
printf("rev_number = %s\n",new_string);
}