提问人:Krinesh Vasava 提问时间:11/16/2023 最后编辑:Fe2O3Krinesh Vasava 更新时间:11/16/2023 访问量:66
如何删除输出中多余的换行符?
How to remove the extra newline in the output?
问:
反向字符串程序:
/**
* C program to reverse order of words in a string
*/
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100 // Maximum string size
int main()
{
char str[100], reverse[100];
int len, i, index, wordStart, wordEnd;
printf("Enter any string: ");
fgets(str,sizeof(str),stdin);
len = strlen(str);
index = 0;
// Start checking of words from the end of string
wordStart = len - 1;
wordEnd = len - 1;
while(wordStart > 0)
{
// If a word is found
if(str[wordStart] == ' ')//means blank space
{
// Add the word to the reverse string
i = wordStart + 1;
while(i <= wordEnd)
{
reverse[index] = str[i];
i++;
index++;
}
reverse[index++] = ' ';
wordEnd = wordStart - 1;
}
wordStart--;
}
// Finally add the last word
for(i=0; i<=wordEnd; i++)
{
reverse[index] = str[i];
index++;
}
// Add NULL character at the end of reverse string
reverse[index] = '\0';
printf("Original string:%s\n\n", str);
printf("Reverse string:%s", reverse);
return 0;
}
并输出:
Enter any string: stack overflow
Original string: stack overflow
Reverse string: overflow
stack
我的预期输出:
Enter any string: stack overflow
Original string: stack overflow
Reverse string: overflow stack
我正在尝试逐字反转字符串,但反转字符串不在同一行中打印。
答:
2赞
juliushuck
11/16/2023
#1
fgets
获取读取输入行,包括按 Enter 键导致的换行符。因此,如果输入 ,str 的实际内容将变为 。stack overflow
stack overflow\n
if (len > 0 && str[len - 1] == '\n') {
str[len - 1] = '\0';
len--;
}
评论
0赞
greg spears
11/16/2023
是的,这明白了。我希望每个人都会注意到 OP 要求解决输出中的换行符问题——而不是如何反转字符串。标题有点误导。
1赞
juliushuck
11/16/2023
没错,应更改问题标题或删除问题。
0赞
greg spears
11/16/2023
我提交了标题更改编辑。它位于审批队列中。
1赞
Harith
11/16/2023
#2
或者,您可以使用:
str[strcspn(str, "\n")] = '\0';
从字符串中删除换行符。
0赞
Fe2O3
11/16/2023
#3
完成工作的另一个(简单)替代方案:
(void)strtok( str, "\n" ); // trim LF from end of string
用来证明你知道你在做什么......(void)
(PS:在从琴弦末端修剪 LF 之后不要打电话......strlen()
评论