精华内容
下载资源
问答
  • 读取字符串
    千次阅读
    2021-04-11 20:14:20

    因为对许多程序而言,scanf 函数和 gets 函数都有风险而且不够灵活,C 程序员经常会自己编写输入函数。通过每次读一个字符的方式读取字符串。

    如果决定自己设计输入函数,那么需要考虑以下问题:

    在开始存储字符串之前,函数应该跳过空白字符吗?
    什么字符导致函数停止读取:换行符,任意空白字符,还是其他某种字符?需要存储这些字符还是忽略掉?
    如果输入的字符串太长以至于无法存储,那么函数应该忽略额外的字符还是把它们留给下一次输入操作?
    示例中,我们选择:不跳过空白字符,换行符结束,不存储换行符,忽略掉额外字符。

    函数原型如下:

    int read_line(char str[], int read_num);
    

    参数:str 表示存储输入的数组,read_num 表示读入字符的最大数量。

    返回值:返回读入字符的个数。

    使用 getchar 实现按字符读入。

    #include<stdio.h>
    
    int read_line(char str[],int read_num);
    
    int main(void){
    	printf("Enter 6 char:");
    	char str[6];
    	int i;
    	read_line(str,6);
    	
    	for(i=0;i<6;i++){
    		printf("%c",str[i]);
    	}
    	return 0;
    } 
    
    int read_line(char str[],int read_num){
    	int c;
    	int i=0;
    	while((c=getchar())!='\n'&&c!=EOF){
    		if(i<read_num){
    			str[i++]=c;
    		}
    	}
    	str[i]='\0';
    	
    	return i;
    }
    
    更多相关内容
  • c++读取字符串和字符的6种函数

    千次阅读 2021-08-30 21:19:12
    字符串或字符的输入有好多个函数,scanf、getline()、cin.getline()、cin.get()、gets()、getchar()等 如果输入是不带空格的字符串,那用什么都可以了,建议用scanf或cin 如果输入带空格,那scanf、cin就用不了了,...

    综述:

    字符串或字符的输入有好多个函数,scanf、getline()、cin.getline()、cin.get()、gets()、getchar()等

    • 如果输入是不带空格的字符串,那用什么都可以了,建议用scanf或cin
    • 如果输入带空格,那scanf、cin就用不了了,可以考虑以下方法:
      • 如果想用string类型的话,就用getline(cin, s)
      • 如果想用字符数组类型的话,可以用**cin.getline()、cin.get()、gets(),**这里不是特别建议用gets(),因为这个函数可能会出点奇怪的问题,也不建议用cin.get(), 因为这个函数既不能忽略缓冲区的换行符,还不能在输入后抹掉自己的结束符,建议使用cin.getline()
    • 如果输入的时候是单个字符,或者只想要字符串的第一个字符,就可以用getchar()、cin.get()

    cin和cin.get都会将结束符或换行符留在缓冲区,而除cin外的函数都不能忽略缓冲区的结束符,所以如果用了cin,再用他们的时候记得加上getchar

    scanf

    scanf用于字符串数组,遇到空格或换行就停止

    char str[10];
    scanf("%s", str);
    cout<<str<<endl;
    

    getline()

    可以接受空格,读取时遇到换行符结束

    有两种读取方法,法一是string流,法二是iostream流,是两个不一样的函数

    方法一:

    使用string

    string str;
    getline(cin, str);
    cout<<str<<endl;
    

    方法二:

    使用字符串数组

    char str[100];
    cin.getline(str, 20, '\n')
    //cin.getline()里面三个参数,第一个是要储存的字符串数组,第二个是最大长度 + 1,最后一个位置用来存储'\0',也就是说你填20,但是只能存前19个字符,第三个是结束符,可省略,默认是换行符
    

    注意⚠️

    程序的输入都建有一个缓冲区,每次输入的过程,其实是计算机先将输入的数据存在输入缓冲区中,而我们使用的输入函数是直接从缓冲区中读取数据。使用cin的时候,遇到空格和换行符和tab键就会停止,此时缓冲区就会有残留数据:空格、换行符、tab。cin和cin.get()从缓冲区读入的时候会自动忽略第一个空格、换行符、tab,就可以正常读入字符串,但有些函数并不能,比如 getline,gets,get, 他们就会直接读取缓冲区剩余的空格、换行符、tab,就导致需要输入的输不进去。

    所以如果你使用getline()或gets()或者cin.get()之前用了cin或cin.get(),请务必在cin后面加个getchar();

    //法一
    string s, ss;
    cin>>s;
    getchar();
    getline(cin, ss);
    cout<<ss<<endl;
    
    //法二
    string s;
    char ss[20];
    cin>>s;
    getchar();
    cin.getline(ss, 20);
    cout<<ss;
    

    get()

    读取字符串时用法同getline()的第二种用法

    与getline()的区别是cin.get()会将结束符或换行符残留在输入缓冲区中,而getline不会,所以使用get后如果还要用除cin外的输入函数,就得加一个getchar()

    char s[100];
    cin.get(s, 10);
    

    读取字符时

    char c;
    c = cin.get();
    

    还可以和getchar一样读走缓冲区中不要的字符

    cin.get();
    

    gets()

    字符串数组

    char s[10];
    gets(s);
    

    gets和getline一样,不会将结束符或换行符留在缓冲区,不过如果缓冲区有结束符或换行符,他也会读进去,所以在前面要加个getchar()

    char s[10];
    gets(s);
    cout<<s<<endl;
    

    也可以用于二维字符数组

    char s[3][10];
        for(int i = 0; i < 3; ++i){
            gets(s[i]);
        }
        for(int i = 0; i < 3; ++i){
            cout<<s[i]<<endl;
        }
    

    getchar()

    getchar()会从缓冲区读走一个字符,如果输入多个字符,也只会读取第一个

    char x = getchar();
    
    展开全文
  • 读取字符串的字符时出错 无法读取内存0.引言1.string类型2.string类型的打印 0.引言 malloc与new的区别!报错: 1.string类型 在写链表的时候,节点的定义中使用了string类型,如果是使用string类型,它的内存是动态...

    读取字符串的字符时出错 无法读取内存

    0.引言

    malloc与new的区别!报错:在这里插入图片描述

    1.string类型

    在写链表的时候,节点的定义中使用了string类型,如果是使用string类型,它的内存是动态分配的,如下图所示,[11]后面还有很多,根据实例化时确定具体大小。而使用malloc无法进行动态内存分配,只能改为new.在这里插入图片描述

    2.string类型的打印

    另外string类型的打印也无法直接cout,打印方式为cout<<stringname.c_str().

    展开全文
  • Java如何从文件中读取字符串

    千次阅读 2021-03-08 02:21:26
    在Java中,是否有更好/不同的方法将文件读取字符串?private String readFile(String file) throws IOException {BufferedReader reader = new BufferedReader(new FileReader (file));Str...

    一、概述

    我已经使用下面的习惯用法已有一段时间了。至少在我访问过的网站上,它似乎是分布最广的。

    在Java中,是否有更好/不同的方法将文件读取为字符串?

    private String readFile(String file) throws IOException {

    BufferedReader reader = new BufferedReader(new FileReader (file));

    String line = null;

    StringBuilder stringBuilder = new StringBuilder();

    String ls = System.getProperty("line.separator");

    try {

    while((line = reader.readLine()) != null) {

    stringBuilder.append(line);

    stringBuilder.append(ls);

    }

    return stringBuilder.toString();

    } finally {

    reader.close();

    }

    }

    二、详解

    读取文件的所有内容

    Java 11添加了readString()方法来读取小文件,以保留行终止符:

    String content = Files.readString(path, StandardCharsets.US_ASCII);

    对于介于Java 7和11之间的版本,这是一个紧凑而健壮的习惯用法,并包装在实用程序方法中:

    static String readFile(String path, Charset encoding)

    throws IOException

    {

    byte[] encoded = Files.readAllBytes(Paths.get(path));

    return new String(encoded, encoding);

    }

    从文件中读取文本行

    Java 7添加了一种便捷方法,可以将文件读取为文本行,以表示List。这种方法是“有损耗的”,因为从每行的末端剥去了行分隔符。

    List lines = Files.readAllLines(Paths.get(path), encoding);

    Java 8添加了Files.lines()生成的方法Stream。同样,该方法是有损耗的,因为剥去了行分隔符。如果IOException在读取文件时遇到,则会将其包装在中UncheckedIOException,因为Stream它不接受引发已检查异常的lambda。

    try (Stream lines = Files.lines(path, encoding)) {

    lines.forEach(System.out::println);

    }

    这Stream确实需要close()打电话;这个在API上的文档很少,我怀疑很多人甚至没有注意到Stream有close()方法。确保使用如图所示的ARM模块。

    如果使用的不是文件源,则可以改用lines()in方法BufferedReader。

    内存利用率

    第一种保留换行符的方法可能会临时需要几倍于文件大小的内存,因为在短时间内,原始文件内容(字节数组)和已解码字符(即使已编码也为16位) (文件中的8位)一次存储在内存中。将其应用于相对于可用内存较小的文件是最安全的。

    第二种方法,读取行,通常会提高内存效率,因为用于解码的输入字节缓冲区不需要包含整个文件。但是,它仍然不适用于相对于可用内存而言非常大的文件。

    为了读取大文件,您需要为程序提供不同的设计,即从流中读取文本块,对其进行处理,然后再移至下一个,重新使用相同的固定大小的内存块。在此,“大”取决于计算机规格。如今,此阈值可能是许多GB的RAM。Stream如果输入的“记录”恰好是单独的行,则使用a的第三种方法是一种方法。(使用的readLine()方法BufferedReader等效于此方法。)

    字符编码

    原始帖子的示例中缺少的一件事是字符编码。在某些特殊情况下,平台默认值是您想要的,但是很少见,因此您应该能够证明自己的选择合理。

    在StandardCharsets类定义了所有Java运行时所需要的编码的一些常量:

    String content = readFile("test.txt", StandardCharsets.UTF_8);

    该平台默认可从该Charset类本身:

    String content = readFile("test.txt", Charset.defaultCharset());

    注意:此答案在很大程度上替代了我的Java 6版本。Java 7的实用程序安全地简化了代码,并且使用映射字节缓冲区的旧答案阻止了读取的文件被删除,直到对映射缓冲区进行垃圾回收为止。您可以通过此答案上的“已编辑”链接查看旧版本。

    展开全文
  • c# 读取资源中的字符串To read a string from the user in C#, we use ... 要使用C#从用户读取字符串 ,我们使用Console类的ReadLine()方法。 Syntax: 句法: public static string Console.ReadLine(); He...
  • java从控制台读取字符串Today we will look into different ways to read string from console in java. 今天,我们将研究从Java中的控制台读取字符串的不同方法。 从控制台读取Java字符串 (Java Read String from...
  • Java基础篇之如何读取字符串

    千次阅读 2020-12-08 17:00:46
    上一篇文章中讲述了如何读取字符,本篇就说说如何读取字符串。从键盘读取字符串,使用readLine()。它是BufferedReader 类的成员。它的通常形式如下: String readLine( ) throws IOException 它返回一个String对象...
  • C++中读取字符串的方式

    千次阅读 2021-07-12 21:06:10
    这里写自定义目录标题]C++读取字符串的两种方式1. getline(): 读取行的输入2. get(): 读取行的输入 C++读取字符串的两种方式 1. getline(): 读取行的输入 getline函数读取整行, 它使用通过回车键输入的换行符来确定...
  • #include <stdio.h> #define LENGTH 128 #define NUMBER 5 int main(void){ int i; char s[NUMBER][LENGTH]; for(i = 0;... puts("-----------打印字符串-----------"); for(i = 0; i <
  • c – Arduino从Serial读取字符串

    千次阅读 2021-03-07 15:46:57
    } } 我试图用Arduino的Serial读取一个4个字符长的字符串,当它是AAAA时打开一个LED,当它是BBBB时关闭串口. 但是,当我输入“AAAA”时,它会显示“AAAÿ”并且沿途有很多“ÿ”. 我认为我正在正确地阅读所有内容,但它...
  • 要知道,scanf函数虽然可以读取字符串,但是scanf函数是以空格为结束的,也就是说scanf只能读取没有空格的一行字符串,"HelloWorld"可以被读取,但"Hello World"就不行,输出结果你会发现就只有Hel...
  • 但是返回之后显示 读取异常,其实是因为string触发了这个异常。如果没有string,show()输出的 i的值应该是随机值(我电脑上是-858993460) 这是为什么呢?其实很简单,C++中,每个类的对象在函数结束时,指的是...
  • 读取字符串

    千次阅读 2019-05-09 13:39:11
    读取字符串时,scanf()和转换说明%s只能读取一个单词,可是在程序中经常要读取一整行输入,而不仅仅是一个单词。 gets()函数: 它读取整行输入,直到遇到换行符,然后丢弃换行符,储存其他字符,并在这些字符的...
  • python四种方式读取字符串

    万次阅读 2020-08-14 11:03:03
    (注意:本文基于Python3.x) ...2、第二种方式,range()或xrange(),把字符串长度传进去就行 girl_str = "love You" for index in range(len(girl_str)): print(girl_str[index]) 3、第三种方式,enume.
  • C++从标准输入输出读取字符串

    千次阅读 2019-09-13 14:22:36
    C++从标准输入输出读取字符串1、getline()方法在C++中本质上有两种getline函数:第一种:在头文件<istream>中,是iostream类的成员函数。第二种:在头文件<string>中,是普通函数。第一种在<istream&...
  • C++ 从键盘读取字符串和字符的几种方式

    千次阅读 多人点赞 2020-08-17 10:48:48
    1、cin cin读取时,遇到空格、制表符、回车会立即终止输入 代码: #include <iostream> #include <string> using namespace std;...使用cin进行输入时,想要输入多个字符串,可以使用while 代码: .
  • c++存储字符串的方法0、 读取字符串1、char 数组2、string 类型 0、 读取字符串 c++ 读取字符串的方式有很多,除了常用的scanf()、cin>>,还有其他函数,参见:C++基础:各种输入方法总结,cin、cin.get()、...
  • arduino串口读取字符串

    万次阅读 2018-06-05 11:46:49
    问题:想用蓝牙app或者其他传感器 连接到arduino串口,可是串口传来... (图一)解答:因为发送端发过来的是 UTF-8字符串,串口每次只读一个字节就打印出来了,所以就出现这种情况,我们要做的就是吧第一次读到的值...
  • 调试bug解决篇:“读取字符串的字符时出错”,“内存访问失败”,程序员未显式使用new导致对象调用malloc,分配内存后未调用构造函数初始化。 现象: 在函数里定义了一个对象,但调试时发现里面的string数据中的字符...
  • Arduino 字符串读取

    2019-04-19 16:16:14
    字符串读取库函数,字符串读取库函数,字符串读取库函数。
  • 从控制台读取字符串

    千次阅读 2020-06-10 19:45:08
    从控制台读取字符串 我们可以使用input()从控制台读取键盘输入的内容。
  • 从文件读取字符串(*)

    万次阅读 2020-04-02 17:59:08
    函数原型 void FGetStr(char *str, int size, FILE *file); 说明:参数 str 为指示字符数组起始地址的指针,size 为数组尺寸,file ...显然,字符串的最大长度应为 size - 1,为字符串结束标记 '\0' 预留空间...
  • 使用的malloc函数新创立的结构体 中的string类型出现了问题,即读取字符串的字符时出错,无法读取内存 最后发现是新建节点时出现了错误:(C语言中没有string类 用malloc无法识别) TreeNode * t = (TreeNode *) ...
  • 示例程序: #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char dest[] = "Hello A... //定义字符变量,并初始化 char ch_temp; //定义字符变量 char *TEMP; /...
  • 1,为了从控制台读取字符串,调用Scanner对象上的next()方法。 举个栗子: import java.util.Scanner; public class test{ public static void main(String[] args){ Scanner input =new Scanner(System.in); ...
  • 10-6-6 从文件读取字符串(*) (10 分)

    千次阅读 2021-05-11 23:10:47
    10-6-6 从文件读取字符串(*) (10 分) 请编写函数,从文件中读取字符串。 函数原型 void FGetStr(char *str, int size, FILE *file); 说明:参数 str 为指示字符数组起始地址的指针,size 为数组尺寸,file 为文件...
  • VS2013 0xCCCCCCCCC 读取字符串的字符时出错

    千次阅读 多人点赞 2018-05-05 23:03:32
    在一个函数调用中,使用二级指针作为函数参数,传递一个字符串指针数组,但是在访问的时候,却出现了运行时错误,具体表现为“0xCCCCCCCC 读取字符串的字符时出错”。 第一反应是字符串忘记初始化了,但是一检查...
  • c++读取字符串的几种方法

    万次阅读 多人点赞 2018-02-03 22:27:01
    这里顺带说明一下,对于本文中的这个kskr1,kskr2,kskr3的例子,对于cin>>也可以适用,原因是这里输入的没有空格,如果输入了空格,比如“ks kr jkl[回车]”那么cin就会已经接收到3个字符串,“ks,kr,jkl”;...
  • 以源代码从网站 KEGG-API获取了所需要的文本,其格式如下:[字符串1]:b">hsa:10056 K01890 phenylalanyl-tRNA synthetase beta chain [EC:6.1.1.20] | (RefSeq) FARSB, FARSLB, FRSB, HSPC173, NEDBLLA, PheHB,...
  • 使用的malloc函数新创立的结构体 中的string类型出现了问题,即读取字符串的字符时出错,无法读取内存 最后发现是新建节点时出现了错误:(C语言中没有string类 用malloc无法识别) TreeNode * t = (TreeNode *) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,196,979
精华内容 478,791
关键字:

读取字符串

友情链接: STM32-EEPROM-SPI-master.zip