gpt4 book ai didi

c - 字符串的第一个字符在哪里?

转载 作者:行者123 更新时间:2023-11-30 17:32:00 25 4
gpt4 key购买 nike

我正在尝试编写“C Primer Plus”书的练习。其中一次,我遇到了一些我无法解决或弄清楚发生了什么的事情。经过一步一步的调试试验,我刚刚测试了这个:

    #include <stdio.h>

int main()
{
char str[500];
gets(str);
puts(str);

return 0;
}

输出(根据需要):

exact ly every thing I enter

exact ly every thing I enter

但是关于我正在尝试做的练习,它对超过 2 个连续空格很敏感。 gets() 后面紧跟着 puts();但我不知道出了什么问题。所以我引用整个代码:

/*
BUG: MORE THAN 1 SPACES NEXT TO EACHOTHER. WHERE THE FIRST CHARACTER GOES?!!

Write a function that takes a string as an argument and removes the spaces from the string.
Test it in a program that uses a loop to read lines until you enter an empty line.
The program should apply the function to each input string and display the result.
*/

#include <stdio.h>
#include <string.h>

int spaceRemover(char *in);
void takeBack(char *in);

int main(void)
{
puts("Enter a string for the SPACE-REMOVER: (RETURN to quit)");
do
{
char str[500];
int spaces;
gets(str);
puts(str); //for debugging to know is it complete just after gets() ?
//printf("\nFirst char of string: %c\n",str[0]);
//printf("\nFirst Char: %p '%c'\n",str,*str);
spaces=spaceRemover(str);
printf("\n%d spaces removed: \n",spaces);
puts(str);
puts("\nEnter a string for the SPACE-REMOVER: (RETURN to quit)");
}
while (getchar() != '\n');

return 0;
}

int spaceRemover(char *in)
{
int count=0, i;
for (i=0 ; i<strlen(in) ; i++)
while ( *(in+i)==' ' ) //IF will skip more than one space; but WHILE won't
{
//printf("%p '%c' \t B4: %p '%c'\n",in+i,*(in+i),in+i-1,*(in+i-1));
takeBack(in+i);
count++;

}
return count;
}

void takeBack(char *spaceLocation)
{
int j=0;
while (*(spaceLocation+j)!= '\0' )
{
*(spaceLocation+j) = *(spaceLocation+j+1);
//putchar(*(spaceLocation+j+1));
j++;
}

return;
}

输出:

Enter a string for the SPACE-REMOVER: (RETURN to quit)

this is separated by single spaces

this is separated by single spaces


5 spaces removed:

thisisseparatedbysinglespaces


Enter a string for the SPACE-REMOVER: (RETURN to quit)

I'll try more than single space separators

'll try more than single space separators

13 spaces removed:

'lltrymorethansinglespaceseparators

注意:将 block 引用与此一起使用,会丢弃连续的空格。

这是怎么回事?我的代码有什么问题导致这个吗?

(使用 Code::Blocks 和 gcc。)

最佳答案

Where the first character of the string goes?

您的第一个字符由 while (getchar() != '\n'); 中的 getchar 读取。当您输入字符串

I'll    try   more than   single space separators  

然后第一个字符Igetchar读取并与\n进行比较。因此,只留下

'll    try   more than   single space separators    

在输入缓冲区中由gets读取。将 main 主体更改为:

    char str[500];
puts("Enter a string for the SPACE-REMOVER: (RETURN to quit)");
gets(str);
do
{
int spaces;
puts(str); //for debugging to know is it complete just after gets() ?
//printf("\nFirst char of string: %c\n",str[0]);
//printf("\nFirst Char: %p '%c'\n",str,*str);
spaces=spaceRemover(str);
printf("\n%d spaces removed: \n",spaces);
puts(str);
puts("\nEnter a string for the SPACE-REMOVER: (RETURN to quit)");
gets(str);
}
while (str[0]);

关于c - 字符串的第一个字符在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24379805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com