使用 fgets 删除尾随换行符
Remove trailing newline character using fgets
我正在编写一个程序来读取文件并确定一个单词是否为回文。我 运行 遇到最后一个标记有一个尾随换行符并且不会注册为回文的问题。
这里是文件输入:
leVel CompUtER Science theORY radar
这是我的代码:
#include<stdio.h>
#include<string.h>
void palindrome(char str[]){
int length = strlen(str);
int i = 0;
int j = length - 1;
for(i = 0; i < length; i++){
if(str[i] != str[j]){
printf("String %s is not a palindrome.\n", str);
return;
}
j--;
}
printf("String %s is a palindrome.\n", str);
return;
}
int main() {
char line1[100];
fgets(line1, 100, stdin);
printf("%s", line1);
char *token;
token = strtok(line1, " ");
while(token != NULL){
printf("%s\n", token);
palindrome(token);
token = strtok(NULL, " ");
}
感谢您的帮助!
如果您使用 strtok
,那么您可以使用 " \n"
作为分隔符,换行符将被处理。
int main() {
char line1[100];
fgets(line1, 100, stdin);
printf("%s", line1);
const char *delim = " \n";
char *token;
token = strtok(line1, delim);
while(token != NULL){
printf("%s\n", token);
palindrome(token);
token = strtok(NULL, delim);
}
...
}
另一种删除换行符的好方法是像这样使用 strcspn
:
char line[1024];
fgets(line, sizeof line, stdin);
line[strcspn(line, "\n")] = 0; // removing newline if one is found
为什么不直接使用 fgetc 并在换行处停止?您甚至可以只在字符串中找到换行符并为其分配“\0”,它就会消失。
我正在编写一个程序来读取文件并确定一个单词是否为回文。我 运行 遇到最后一个标记有一个尾随换行符并且不会注册为回文的问题。
这里是文件输入:
leVel CompUtER Science theORY radar
这是我的代码:
#include<stdio.h>
#include<string.h>
void palindrome(char str[]){
int length = strlen(str);
int i = 0;
int j = length - 1;
for(i = 0; i < length; i++){
if(str[i] != str[j]){
printf("String %s is not a palindrome.\n", str);
return;
}
j--;
}
printf("String %s is a palindrome.\n", str);
return;
}
int main() {
char line1[100];
fgets(line1, 100, stdin);
printf("%s", line1);
char *token;
token = strtok(line1, " ");
while(token != NULL){
printf("%s\n", token);
palindrome(token);
token = strtok(NULL, " ");
}
感谢您的帮助!
如果您使用 strtok
,那么您可以使用 " \n"
作为分隔符,换行符将被处理。
int main() {
char line1[100];
fgets(line1, 100, stdin);
printf("%s", line1);
const char *delim = " \n";
char *token;
token = strtok(line1, delim);
while(token != NULL){
printf("%s\n", token);
palindrome(token);
token = strtok(NULL, delim);
}
...
}
另一种删除换行符的好方法是像这样使用 strcspn
:
char line[1024];
fgets(line, sizeof line, stdin);
line[strcspn(line, "\n")] = 0; // removing newline if one is found
为什么不直接使用 fgetc 并在换行处停止?您甚至可以只在字符串中找到换行符并为其分配“\0”,它就会消失。