繁体   English   中英

如何在C中读取包含空格的字符串?

[英]How can I read a string with spaces in it in C?

scanf(“%s”,str)不会这样做。 它会在第一个空间停止阅读。 当字符串很大时,gets(str)也不起作用。 有任何想法吗?

使用带有STDIN的fgets作为文件流。 然后,您可以指定要读取的数据量以及放置位置。

char str[100];

试试这个

 scanf("%[^\n]s",str);

或这个

fgets(str, sizeof str, stdin))

创建自己的函数来读取一行。 这是你基本要做的事情:

1. fgets into allocated (growable) memory
2. if it was a full line you're done
3. grow the array
4. fgets more characters into the newly allocated memory
5. goto 2.

实施可能有点棘手:-)

您需要考虑需要传递给函数的内容(至少是数组的地址及其大小); 当一切“有效”或出现错误时,函数返回什么。 您需要确定什么是错误(字符串长度为10Gbytes,没有'\\ n'错误?)。 您需要决定如何增长数组。


编辑

实际上fgetc而不是fgets可能更好

get a character
it it EOF? DONE
add to array (update length), possible growing it (update size)
is it '\n'? DONE
repeat

要读取带空格的字符串,您可以执行以下操作:

char name[30],ch;

i=1;
while((ch=getchar())!='\n')
{
name[i]=ch;
i++;
}
i++;
name[i]='\n';
printf("String is %s",name);

你什么时候想停止阅读? 在EOF,特定角色,或者什么?

您可以使用%c读取特定数量的字符

c匹配一系列宽度计数字符(默认值为1); 下一个指针必须是指向char的指针,并且必须有足够的空间容纳所有字符(不添加终止NUL)。 通常跳过前导空格被抑制。 要首先跳过空白区域,请使用格式中的显式空格。

您可以使用%[读取特定字符(或最多排除的字符)

[匹配指定的一组接受字符中的非空字符序列; 下一个指针必须是指向char的指针,并且字符串中的所有字符必须有足够的空间,以及终止NUL字符。 通常跳过前导空格被抑制。 该字符串由特定集合中的字符组成(或不在其中); 该集合由开括号[字符和近括号]字符之间的字符定义。 如果开括号后面的第一个字符是旋音^,则该集合将排除这些字符。 要在组中包含一个小括号,请将其作为开括号或旋转后的第一个字符; 任何其他位置将结束该集。 连字符 - 也很特别; 当放置在两个其他字符之间时,它会将所有插入的字符添加到集合中。 要包含连字符,请将其设置为最后一个关闭括号之前的最后一个字符。 例如,`[^] 0-9-]'表示设置``除了紧括号,零到九和连字符'之外的所有东西。 字符串以字符的外观结束,而不是(或者,带有cir-cumflex,in)设置或字段宽度用完时

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM