精华内容
下载资源
问答
  • 因为我们定义的是一个字符数组,数组名就能代表数组的起始地址,然后每输入一个字符,会依次存入数组中, **字符串以\0结尾,所以上边那个长度为10的数组,最多存9个字符,最后一个字符为\0,**输入多了,会报错。 ...

    字符串的输入输出

    ①使用scanf和printf

    char str[10];
    printf("请输入一个字符串\n");
    scanf("%s",str);
    printf("该字符串为%s\n",str);
    

    大家可能注意到了,字符串输入的时候,没有用到取地址符;
    因为我们定义的是一个字符数组,数组名就能代表数组的起始地址,然后每输入一个字符,会依次存入数组中,
    **字符串以\0结尾,所以上边那个长度为10的数组,最多存9个字符,最后一个字符为\0,**输入多了,会报错。

    注意:scanf里边除了"%s","%d"这种的东西,不能再多加提示语,会无法正常获取输入信息
    eg: scanf(“请输入一个字符串:%s”,x);
    这种不行,如果想要有提示语,可以用上边代码的形式,先写一句printf,然后写scanf.

    ②使用gets和puts

    char str[10];
    gets(str);
    puts(str);
    

    要注意的是gets和puts函数只能对字符串进行输入和输出
    在这里插入图片描述
    这种的就会报错!!!!

    两种输入输出对比
    ①scanf可以输入任何基本数据类型,gets只能输入字符串,单个字符都不可以
    ②scanf遇到空格就会认为是输入结束,对字符串中有空格的输入不太友好;gets只认为回车是输入结束;
    相比之下,gets对于字符串的输入更方便一些。
    而且,gets和puts进行操作时,不用表明数据类型(类似%s,%d之类的)

    定义字符串也可使用string,但是得导入一个文件,如下所示

    #include<string>
    
    string str;
    scanf("%s",str);
    printf("该字符串为%s\n",str);
    

    不用字符数组表示也可以,其他的输入输出操作和字符数组相同。

    展开全文
  • C还是四年之前看过,对于C下面的字符串一直很恐惧,今天下定决心,要好好研究一下cp)存入字符指针数组(char * spa[])" title="C语言:将输入字符串(char* cp)存入字符指针数组(char * spa[])" style=...
    在C++下面读入string类型,存入vector中非常的简单。在C语言下面读入string倒是很简单,但是要存入指针数组中貌似费了很大的劲都不行。C还是四年之前看过,对于C下面的字符串一直很恐惧,今天下定决心,要好好研究一下C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])
    **********************************************************************************************
    首先来分析字符数组和字符指针:
    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])
    输出结果如下:
    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])
    字符型数组和字符型指针都是可以表示字符串的,它们的结尾处为'\0';
    一直在说数组名实际上是数组的首地址值,从这点可以看出scanf输出字符串的原理。因为字符型指针名传递的肯定是地址,所以scanf(“%s”)的原理肯定是找到所传递的地址处,挨个的输出地址中的字符,直到碰到'\0',认为字符串结束了。
    下面可以做个小试验:
    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])
    输出的结果如下:
    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])
    实际上char型的数组和指针没有什么特殊的性质。它们的特殊之处仅仅在于,当碰到%s,它们表示为string时,系统知道'\0'表示结束。
    **********************************************************************************************
    再来分析指针数组:
    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[]) 
    弄明白上面的一点,这个的结果也很容易理解,如下:
    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[]) 
    感觉关键就在于"%s"这个选项上,它的机制就是找地址(注意是地址),然后输出,碰到'\0'结束。
    **********************************************************************************************
    为了将字符串存入字符型的指针数组中,首先先搞定字符串存入字符指针中

    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[]) 
    结果显而易见:
    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])
    这里的原理和第一部分一样,%s的机理是从地址入手。
    **********************************************************************************************
    下面是关键了,将用户输入的字符串存入指针数组中。先模仿C++的思路,写一个显而易见的版本。

    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])
    结果如下:
    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[]) 
    可以看第48行这里是一个指针之间的赋值,实际上传递的是地址值,所以字符指针数组中的每个值都是tmp的地址值,所以最后结果是一样的
    正确的方法应该是,改变charPointerArray中每一个元素所指的地址中的内容(字符串):
    ---------------------------------------------------------------------------------------------
    使用strcmp可以对字符串的内容赋值,但是将地48行改成如下的形式,会报错:
    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])
    会出现内存引用的错误:
    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])
    可以思考一下这里是为什么?举个更加简单的例子来看:
    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[]) 
    这里也是会报内存引用出错。strcpy的作用机理是将huan[]的字符复制到chen中,直到'\0'为止。这里使用了一个未初始化的字符指针,编译器不知道该指针指向哪里,实际上就是一个NULL,对它的应用所以会报错。
    下面可以做一个小测试,使用new为它分配一个地址,然后再来运行:
    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])
    下面是运行的结果:
    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])
    这里可以看出,只要不是NULL就可以了(废话了,NULL的引用必然出错。。。C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])
    所以之前会出现内存的引用出错,完全是因为使用了NULL,chen指向不知道的地址,strcpy也不知道往哪里赋值。
    ---------------------------------------------------------------------------------------------总结前面得到的两点,接下来就可以解决最开始提出来的问题:
    (1)字符指针还是指针,它显的特殊,仅仅是因为%s的内部机制;
    (2)对指针的操作前提是指针必须不是NULL。
    所以想要char* c的值存入char* sp[]中,必须单独的为每个sp[n]先分配内存(C用malloc或C++用new),下面是最后的版本:
    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[])
    哈哈,最后的结果如下:
    C语言:将输入的字符串(char* <wbr>cp)存入字符指针数组(char <wbr>* <wbr>spa[]) 
    **********************************************************************************************
        一晚上就搞了这么一个问题,不过很值得。终于完全弄懂C语言下的字符串了,再也不需要使用stringstream来回避它,哈哈~~~很享受这种慢慢的分析问题到最后解决问题的过程,nice~~~虽然原因现在看起来很2B~~~最后再声明一遍哈:
    (1)字符指针还是指针,它显的特殊,仅仅是因为%s的内部机制;
    (2)对指针的操作前提是指针必须不是NULL。
    展开全文
  • 关于C语言字符数组

    2019-04-02 21:32:45
    记录一下字符数组的妙用 1.快速赋初值 关于将字符串加入数组的巧妙之处 可以直接初始化,用字符串的定义"string " ...//%s存入字符串,s因为是数组,已经是地址了,所以不用取址符 //输出也是一样的 printf("%s...

    记录一下字符数组的妙用

     

    1.快速赋初值

    关于将字符串加入数组的巧妙之处

    可以直接初始化,用字符串的定义"string "

    char s[10]="amazing";

    2.快速输出

    当然对于输入,也可以用正常的输入输出

    char a[80];
    scanf("%s",s);
    //%s存入字符串,s因为是数组,已经是地址了,所以不用取址符
    //输出也是一样的
    printf("%s",s);
    

    3.gets()和puts()

    对于字符串有更加便捷的操作,就是gets()和puts(),输入时以空格判别是否输入停止

    附上用法

    char s[80];
    gets(s); //可以输入一个字符串
    puts(s); //输出储存在数组中的字符串
             //值得注意的是,puts()是自带换行的

    当然啦,对于想一个一个的通过循环输出也是可以的

    int i;
    char s[8]="abcdefg";
    for(i=0;i<8;i++)
        printf("%c",s[i]);
    

    4.putchar()

    此时和上面的printf等价的一个用法就是putchar

    for(i=0;i<8;i++)
        putchar(s[i]);

    5.strcpy()

    关于数组还有最后一个,就是copy啦,值得注意的是,这里需要新加一个头<string.h>

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        char s1[80],s2[80];
        gets(s1);
        puts(s1);
        strcpy(s2,s1);  //把数组s1复制给s2
        puts(s2);
        return 0;
    }
        

    以上的这些都是关于字符数组的用法。

    关于字符串,是需要补充一下

    展开全文
  • 问题:在加入scanf 将字符串存入数组时候,无法输入。 解决办法:尝试了网上差不多7-8种办法,依然无法解决,最终发现问题出在了 调试过程上,不是配置问题。 #include <stdio.h> int main(){ ch

    刚刚入坑 vscode,重新研究c语言,关于字符串 结束符 '\0’体验,想调试看看每个变量。发现无法调试。

    总结:

    现象:在不需要scanf 键盘输入时候,调试其他代码没有问题,编译也没有问题。

    问题:在加入scanf 将字符串存入数组时候,无法输入。

    解决办法:尝试了网上差不多7-8种办法,依然无法解决,最终发现问题出在了 调试过程上,不是配置问题。

    #include <stdio.h>
    
    int main(){
     
        char str1[5],str2[5],str3[5];
        printf("开始输入\n");
        scanf("%s%s%s",str1,str2,str3);
        printf("%s",str1);
        printf("%s",str2);
        printf("%s",str3);
        return 0;
    }
    

    两处修改位置

    1、首先在 launch.json 中打开外部控制台 “externalConsole”: true,

    2、设置里面 找到 Run In Terminal 勾选 插件库中 安装 code Runner插件

    完成上面设置基本上 可以调试了 调试时候 跳出命令窗口 输出。

    调试过程解决了问题,一开始没有加入

    printf(“开始输入\n”);

    导致 开始调试 执行后 不知道是否能输入,其实需要将

    scanf("%s%s%s",str1,str2,str3);

    执行后 才能输入。

    调试过程

    1、执行到printf(“开始输入\n”); 但未执行
    在这里插入图片描述
    2、执行这句结束 会有输出 ,下方光标箭头指向即将执行语句 scanf
    但这个时候是无法键盘输入的。只有执行完 scanf 才能输入 输入时候注意输入法
    在这里插入图片描述
    3、执行scanf后 变量这边消失了,控制台可以输入,不能输入切换输入法英文
    在这里插入图片描述
    4、控制台内 输入完 ,回车 左边变量 发生改变,可以体会到 ‘\0’ 的储存方式
    当数组长度 小于输入字符串长度 在字符串后一位自动加入’\0’ 至于再后一位 就是不确定了
    在这里插入图片描述 5、最终 可以看到 输出时候 字符串数组中遇到’\0’ 结束输出,并且 不会输出’\0’
    \0 是空字符串 不是空格
    在这里插入图片描述

    细节问题 多多注意!坑了一晚上

    展开全文
  • #include #include int main() { char *p,a[100]; gets(a); p=a+strlen(a); while(--p>=a) putchar(*p); return 0; }指针 不用指针 #include #include int main() { int l,i;...
  • //str用于输入字符串,s用来存储字符串 int n, i, j, count; scanf_s("%s", &str); i = j = 0; for (n = 0; n (str); n++) { if (str[n] == '\0') { break; } else if (str[n] != ...
  • 一、PTA实验作业 题目1:7-1 字符串转换成十进制整数 1. 本题PTA提交列表 2. 设计思路 定义数组str存放初始字符串,line...='#') i++输入初始字符串,str[i]='\0'将结束符存入数组 for i=0 to str[i]=‘\0’从0...
  • C语言中从键盘输入字符串时的一些问题

    万次阅读 多人点赞 2019-05-17 20:52:10
    C语言中从键盘输入字符串时的一些问题 1.scanf() scanf()在输入字符串时有很大的弊端, 例如: 1). scanf()在从键盘读入字符时并不会根据所定义的字符数组的大小来控制读入多少个 , 而是从scanf( ) 中传入的地址开始...
  • 笔者说:“ 以下代码为笔者大一初入C语言的笔记与作业,谨以此记录我的C学习...输入字符串的逆序输出 样例输入 abcd 样例输出 dcba #include<stdio.h> #include<string.h> void swap(char *p1,char *p2);/
  • 题目解决代码及点评/* 68. 在主函数中输入10个不等长的字符串,用另一函数对它们排序。 然后在主函数中输出这10个已排好序的字符串,用指针数组完成。 */ #include ...i++)//将字符串长度挨个存入数组a
  • 33.fgets() scanf() //缺点:不可以接收空格,且能越界接收...gets() //优点:可以接收空格 缺点:不安全,如果数组长度为50,输入了50个字符,那么会全部存入,没有空间存放字符结束符。且能越界接收。 fgets() //是
  • c语言基础笔记DAY4 1.scanf缺点 遇到空格提前结束读取 如果存放字符的空间不足,会继续存放,导致内存污染 ...库函数:从键盘读取一个字符串 char num[128]; fgets(num , sizeof(num),stdin);//从stdin(标准输入)读
  • C语言字符类型输入方式选择

    千次阅读 2020-02-26 19:46:15
    1、char是字符型,而字符是一种特殊的整数。每个字符都有一个整数编码,称为ASCII码。...会读入一个不含空格、TAB、和回车的字符串存入字符数组s。注:遇到空白字符会停下来。 3、如果是字符数组char s[maxn][m...
  • 实例分析 输入一字符串长度小于50统计其中包含多少个单词单词之间用空格分隔开例如输入I am a student输出4 分析首先将字符串存入数组然后比较数组中各元素与其相邻数组元素的关系如果该数组元素为字符而其相邻元素...
  • C语言数组编程题.pdf

    2020-08-09 02:31:30
    4 数组 一实验目的 1掌握一维数组的定义赋值和输入输出的方法 2掌握字符数组定义初始化赋值的方法 3了解常见的字符串函数功能及其使用方法 4 掌握二维数组的定义与引用 二实验内容 1编写程序输入 10 个整数存入一维...
  • C语言实验——保留整数 ...输入一个字符串str1,把其中的连续非数字的字符子串换成一个‘*’,存入字符数组str2 中,所有数字字符也必须依次存入 str2 中。输出str2。 Input 输入为一行字符串str1,其中可能包含...
  • 1. 题目: 输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别...分析:可以先查找到head位置和tail的位置,然后把这之间的字符串存入新的数组最后打印 下面是代码实现: /******
  • c语言实现将输入的一个整型数字(含正负数)转化为字符串存入数组并输出该字符串 例如:-123存入数组为‘-’ ‘1’ ‘2’ ‘3’ ‘/0’
  • 相同点:都是将从键盘输入字符串存入数组中,输入完成后要以回车结束输入。 不同点:用scanf时,在输入过程中碰到空格时,系统认为输入结束,并将空格之前的字符作为有效字符存入数组,并在尾部追加\0作为结束标志;...
  • 相同点:gets 函数和 scanf 函数都可以作为字符串的输入函数,相同点都是将从键盘输入字符串存入数组中,输入完成后要以回车来结束输入。 不同点: 1、使用 scanf 时,在输入过程中碰到空格时系统认为输入结束,并...
  • 输入一行字符,分别统计出其中...c语言里gets(a) 表示输入一个字符串到数组a,a表示读取一个字符串存入a中,字符串输入结束标志为换行符。 *puts()函数的用法:*用来向标准输出设备(屏幕)输出字符串并换行,具体...
  • 大数 加法 c语言

    万次阅读 多人点赞 2016-07-20 19:02:23
    最近遇到一个关于大数的问题顿时感觉好方,决定系统学...注意:关于大数问题,由于数组不好界定输入数的大小(数组的长度),因此主要思想就是先用字符串输入保存在字符串数组中,再逆序存入整形数组进行最后逐位运算。
  • 思路:这道题统计数量最多的字母,那么我们可以将字母转化为数字,如果小写字母,就减去‘a',如果大写字母减去‘A’,将转换之后的字母存入数组,之后比较大小,详情见代码。   1042 字符统计 (20 分) 请编写...
  • C语言-程序

    热门讨论 2017-12-17 18:05:35
    输入字符串ag34fhs898ssds*&89,将串中连续的数字作为一个整数依次存入数组中,统计整数数目,并输出这些整数 来一波手写的代码
  • c语言几种排序方法

    千次阅读 2018-07-17 17:54:39
    1.将输入的一串数字存入数组中,可先用字符串的形式输入,再通过转化成整型数存入数组中 int len=0,tmp=0; int a[MAXSIZE]={0}; char string[100]={0}; printf("请输入任意个数的整数,以回车结束\n"...
  • C语言实验——保留整数

    千次阅读 2018-08-23 16:00:38
    输入一个字符串str1,把其中的连续非数字的字符子串换成一个‘*’,存入字符数组str2 中,所有数字字符也必须依次存入 str2 中。输出str2。 Input 输入为一行字符串str1,其中可能包含空格。字符串长度不超过80个...
  • C语言指针的一些题目

    2018-01-03 21:48:00
    解体思路: 把输入的字符存入字符数组中直到输入".",然后调用函数,把字符串的第一个字符(即是第一个单词的第一个字母)转换成大写字母,然后之后的每一个单词的第一个字母的怕判断方法是:通过判断一个字符是否是...

空空如也

空空如也

1 2 3 4 5
收藏数 92
精华内容 36
关键字:

c语言输入字符串存入数组

c语言 订阅