字符串读入总结

字符串的输入的主流函数:

一、scanf();  二、cin;  三、gets();  四、getline();  五、sscanf()。

一、scanf("%s",str);

遇见空格或换行就停止。

#include<stdio.h>
int main()
{
        char str[100];
        while(true)
        {
               scanf("%s",str);
               printf("%s\n",str);
        }
        return 0;
}

输入:123 456

输出:123

         456

 

二、cin>>str;与scanf();

相似遇见空格或换行就停止;以文件结束。

 

三、gets(str);

gets(str)函数与 scanf("%s",&str) 相似,但不完全相同,使用scanf("%s",&s) 函数输入字符串时存在一个问题,

就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止或文件结束

 

四、getline(cin,str);

需要加头文件#include<stdlib.h> ;而且str 必须是 string类型;

读入一行以文件或换行结束。

 

五、sscanf();

1、sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。

2、 %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)

  %[aB'] 匹配a、B、'中一员,贪婪性

  %[^a] 匹配非a的任意字符,贪婪性

3、用法例子

      a. 常见用法。

  char buf[512] ;

  sscanf("123456 ", "%s", buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中!

  printf("%s\n", buf);

  结果为:123456

  b. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。

  sscanf("123456 ", "%4s", buf);

  printf("%s\n", buf);

  结果为:1234

  c. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。

  sscanf("123456 abcdedf", "%[^ ]", buf);

  printf("%s\n", buf);

  结果为:123456

  d. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。

  sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);

  printf("%s\n", buf);

     结果为:123456abcdedf

  当输入:

  sscanf("123456abcdedfBCDEF","%[1-9A-Z]",buf);

  printf("%s\n",buf);

   结果为:123456

  e. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。

  sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);

  printf("%s\n", buf);

  结果为:123456abcdedf 

  f、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中 

  sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);

  printf("%s\n", buf);

  结果为:12DDWDFF

  g、给定一个字符串"hello, world",仅保留world。(注意:","之后有一空格,%s遇空格停止,加*则是忽略第一个读到的字符串)

  sscanf("hello, world", "%*s%s", buf);

  printf("%s\n", buf);

  结果为:world

  %*s表示第一个匹配到的%s被过滤掉,即hello被过滤了

  如果没有空格则结果为NULL。

### 回答1: 给定若干个字符串,不定数量,每行一个。有些字符串可能出现了多次。如果读入一个字符串后,发现这个字符串以前被读入过,则这个字符串被称为前面相同的字符串的复读,这个字符串被称为复读字符串。相应的,每个首次出现的字符串就是非复读字符串。 ### 回答2: 给定若干个字符串,将这些字符串逐行读入。如果读入字符串之前已经出现过,则这个字符串被称为复读字符串,反之,如果是第一次出现的字符串,则被称为非复读字符串。 对于这些字符串的处理,可以采用以下步骤: 1. 初始化一个空集合,用于存储已经读入过的字符串。 2. 开始读取字符串。 3. 每次读取一个新的字符串后,先判断这个字符串是否在集合中存在。 4. 如果存在,说明这个字符串之前已经被读入过,被称为复读字符串。 5. 如果不存在,说明这个字符串是第一次出现,被称为非复读字符串。将这个字符串添加到集合中,以备之后的检查使用。 6. 重复步骤3至步骤5,直到读取完所有的字符串。 7. 统计结果:分别计算复读字符串和非复读字符串的数量。 通过这个方法,我们可以快速找到非复读字符串和复读字符串,并且可以统计它们的数量。同时,集合的使用可以保证复读字符串只被计算一次,不会重复计算。 在代码实现方面,可以采用循环的方式读取每一行字符串,使用条件语句判断字符串是否存在,使用计数变量分别记录复读字符串和非复读字符串的数量。最后输出结果即可。 总结起来,给定一些字符串,通过判断每个字符串是否已经出现过,可以得到非复读字符串和复读字符串,并统计它们的数量。这个方法简单、高效,并且适用于不定数量的字符串。 ### 回答3: 假设给定的字符串为["abc", "def", "abc", "ghi", "jkl", "mn", "abc"]。 首先,我们可以使用一个列表来存储读入字符串,初始化为空列表[]。 然后,我们逐个读入字符串。对于每一个字符串,我们可以使用循环来检查它是否出现过。如果这个字符串在列表中已经存在,那么它就是复读字符串;如果不存在,那么就将它添加到列表中,并称为非复读字符串。 具体的步骤如下: 1. 初始化一个空列表read_strings = [],用于存储读入字符串。 2. 依次读入每个字符串: a. 输入一个字符串str。 b. 使用循环遍历读入字符串列表read_strings,判断str是否和列表中的元素相同。 c. 如果str在列表中已经存在,输出str是复读字符串。 d. 如果str在列表中不存在,将str添加到列表read_strings中,并输出str是非复读字符串。 例如,对于给定的字符串列表["abc", "def", "abc", "ghi", "jkl", "mn", "abc"],输出如下: 输入:"abc" 输出:非复读字符串 输入:"def" 输出:非复读字符串 输入:"abc" 输出:复读字符串 输入:"ghi" 输出:非复读字符串 输入:"jkl" 输出:非复读字符串 输入:"mn" 输出:非复读字符串 输入:"abc" 输出:复读字符串 以上是使用列表来实现的一种解决方案。可以根据具体需求和情况选择其他数据结构来实现同样的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值