查找字符串中字符的结尾
Find end of characters in a string
我正在编写一个凯撒密码,它将数组中每个字符的值移动一个设定的量。我遇到的问题是我的字符串之后的 char 值也被移动了。 我希望忽略这些值 entirely/not 打印它们。
我在下面编译了以下内容,但我也想不出如何不解析尾随字符。我的加密函数 必须 使用这些确切的参数,所以我也不能将长度传递给它。
#include <stdio.h>
void encrypt(char *message, int shift);
int main(void)
{
int shift_amount;
int length;
char message[80];
char c;
printf("Enter message to be encrypted: ");
for (length = 0; ( c = getchar()) != '\n'; length++) {
message[length] = c;
}
printf("Enter shift amount (1-25): ");
scanf("%d", &shift_amount);
encrypt(message, 3);
return 0;
}
void encrypt(char *message, int shift){
printf("Encrypted message: ");
for (int i = 0; i < 80; i++) {
char ch = message[i];
if (message[i] >= 'a' && message[i] <= 'z') {
ch = (( ch - 'a' ) + shift) % 26 + 'a';
} else if (message[i] >= 'A' && message[i] <= 'Z') {
ch = (( ch - 'A' ) + shift) % 26 + 'A';
}
printf("%c", ch);
}
printf("\n");
}
理想的示例 input/output 是:
输入:"Go ahead, make my day." 移位 3
输出:"Jr dkhdg, pdnh pb gdb."
谢谢!
与其修改正好 80 个字符,不如在到达字符串末尾时停止。你怎么知道字符串的结尾是什么时候?因为字符串末尾后的第一个字符将是字符串终止符,即 '[=11=]'
.
在您的代码中,您可以将 for
条件从 i<80
替换为 message[i] != '[=14=]'
,或者如果您还想指定最大长度,则同时使用这两个条件,只是为了确定。
据我所知,您的字符串根本没有终止符。当你从控制台读取字符时,你应该放一个:
printf("Enter message to be encrypted: ");
for (length = 0; ( c = getchar()) != '\n'; length++) {
message[length] = c;
}
message[length] = '[=10=]'; // <- add this here
我正在编写一个凯撒密码,它将数组中每个字符的值移动一个设定的量。我遇到的问题是我的字符串之后的 char 值也被移动了。 我希望忽略这些值 entirely/not 打印它们。
我在下面编译了以下内容,但我也想不出如何不解析尾随字符。我的加密函数 必须 使用这些确切的参数,所以我也不能将长度传递给它。
#include <stdio.h>
void encrypt(char *message, int shift);
int main(void)
{
int shift_amount;
int length;
char message[80];
char c;
printf("Enter message to be encrypted: ");
for (length = 0; ( c = getchar()) != '\n'; length++) {
message[length] = c;
}
printf("Enter shift amount (1-25): ");
scanf("%d", &shift_amount);
encrypt(message, 3);
return 0;
}
void encrypt(char *message, int shift){
printf("Encrypted message: ");
for (int i = 0; i < 80; i++) {
char ch = message[i];
if (message[i] >= 'a' && message[i] <= 'z') {
ch = (( ch - 'a' ) + shift) % 26 + 'a';
} else if (message[i] >= 'A' && message[i] <= 'Z') {
ch = (( ch - 'A' ) + shift) % 26 + 'A';
}
printf("%c", ch);
}
printf("\n");
}
理想的示例 input/output 是:
输入:"Go ahead, make my day." 移位 3
输出:"Jr dkhdg, pdnh pb gdb."
谢谢!
与其修改正好 80 个字符,不如在到达字符串末尾时停止。你怎么知道字符串的结尾是什么时候?因为字符串末尾后的第一个字符将是字符串终止符,即 '[=11=]'
.
在您的代码中,您可以将 for
条件从 i<80
替换为 message[i] != '[=14=]'
,或者如果您还想指定最大长度,则同时使用这两个条件,只是为了确定。
据我所知,您的字符串根本没有终止符。当你从控制台读取字符时,你应该放一个:
printf("Enter message to be encrypted: ");
for (length = 0; ( c = getchar()) != '\n'; length++) {
message[length] = c;
}
message[length] = '[=10=]'; // <- add this here