精华内容
下载资源
问答
  • c语言一个字符变量存储多个字符

    千次阅读 2018-12-03 18:54:30
    又定义了一个char a = ' a '; // a的内存地址紧挨着 s ,如下 当然,打印地址应该用printf(“%p”),不过意思都一样啦,内存地址都是差一位的 #include int main() { char s; printf("%d\n",&s...
    #include<stdio.h>
    
    int main()  
    {
            char s;
            char a = 'a';
            scanf("%s",&s);
            printf("input word is:%s, %c\n",&s, a);
            return 0;
    }

    输入123 , 结果如下:

    发现a 的值居然打印为2了!


    如果把上面代码中的printf("%s,"); 改为 printf("%c,");

    输入nsb,发现char s 的打印异常 , a 仍为 输入的第二个字符 而不是' a '


    当然,如果scanf(“%c”)时当然不会出现这些问题,这里只是讨论用scanf(“%s”)输入char数据的情况

    在以上的例子中,

    先定义了一个char s;  // sizeof(char)== 1

    又定义了一个char a = ' a '; // a的内存地址紧挨着 s  ,如下

    当然,打印地址应该用printf(“%p”),不过意思都一样啦,内存地址都是差一位的


    #include<stdio.h>
    
    int main()  
    {
    	    char s;
    	    printf("%d\n",&s);
    	    
    	    char a = 'a';
                // 只要加上这行printf()语句,输出就又正常了
    	    printf("%d\n",&a);
    	    
    	    scanf("%s",&s);
    	    printf("input word is:%s, %c\n",&s, a);
    	    return 0;
    }

    真是让人奇怪哈?我觉得也是编译器的原因,资料如下:

    https://blog.csdn.net/ljx_5489464/article/details/50839801

     

    www.shengrizhufuyu.cn

    展开全文
  •  char *a[]定义了一个指针数组,注意不是char[], char[]是不能同时初始化为三个字符的,定义以后的a[]其实内部有三个内存位置,分别存储了abc/0,cde/0,fgh/0,三个字符串的起始地址,而这三个位置的内存地址却不是这三个...
    #include <iostream> 
    
    using namespace std;
     const int MAX = 4;
     int main () {
     const char *names[MAX] = { "liming", "jane", "liong", "jay", };
     for (int i = 0; i < MAX; i++) {
     cout << "Value of names[" << i << "] = "; 
     cout << names[i] << endl; } 
    return 0;
     }

    char *a[]={"abc","cde","fgh"};  
    char* *b=a;  
    cout<<*b<<"|"<<*(b+1)<<"|"<<*(b+2)<<endl;

      char *a[]定义了一个指针数组,注意不是char[], char[]是不能同时初始化为三个字符的,定义以后的a[]其实内部有三个内存位置,分别存储了abc/0,cde/0,fgh/0,三个字符串的起始地址,而这三个位置的内存地址却不是这三个字符串的起始地址,在这个例子中a[]是存储在栈空间内的,而三个字符串却是存储在静态内存空间内的const区域中的,接下去我们看到了char* *b=a;这里是定义了一个指向指针的指针,如果你写成char *b=a;那么是错误的,因为编译器会返回一个无法将char* *[3]转换给char *的错误,b=a的赋值,实际上是把a的首地址赋给了b,由于b是一个指向指针的指针,程序的输出cout<<*b<<"|"<<*(b+1)<<"|"<<*(b+2)<<endl;

      结果是

    abc 
    cde 
    fgh
     

    展开全文
  • 实现一个函数翻转字符串(将一个字符串的内容,逆序存储)  这与实现模拟strcpy的过程有相似之处,模拟实现strcpy是将原字符串复制过来,而现在需要创建一个新的字符串空间,将原字符内容串逆序存储,写函数,利用...

    实现一个函数翻转字符串(将一个字符串的内容,逆序存储)

            这与实现模拟strcpy的过程有相似之处,模拟实现strcpy是将原字符串复制过来,而现在需要创建一个新的字符串空间,将原字符内容串逆序存储,写函数,利用指针变量找到字符串中每一个字符所在的位置,再对其进行赋值操作。

           一定要注意字符串结尾必须有  ‘\0'  ,否则执行程序的结果会出错。

    程序代码如下:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <Windows.h>
    #include <stdio.h>
    #include <string.h>
    #include <assert.h>
    char *new_String(char* newstr, const char* mystring)
    {
    	assert(mystring);
    	assert(newstr);
    	int len = strlen(mystring);  //求出原字符串的长度
    	char* ret = newstr;
    	*(newstr + len) = '\0';//先给新字符串附上结尾
    	while (*mystring)  //原字符串不为0,继续实行循环体
    	{
    		*(newstr+len-1) = *mystring;  //给新的字符串赋值,(翻转字符串)所以原字符串的第一个会变成新字符串的最后一个,以此类推
    		*mystring++;
    		len--;
    	}
    		return ret;
    }
    int main()
    {
    	char arr1[] = "ynitsed ym era uoy";  //输入要翻转的字符串
    	char arr2[64];  //新的字符串
    	char* ret = new_String(arr2, arr1);  //调用函数,实现翻转,将翻转结果存储在ret中
    	printf("%s\n", ret);  //打印ret
    	system("pause");
    	return 0;
    }

    运行结果如图:


    展开全文
  • 用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串。 [输入] 初始字符串,插入位置,插入字符,删除字符。 [输出] 已建立链表(字符串),插入字符后链表,删除字符后链表,...

    [问题描述]

    用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串。

    [输入]

    初始字符串,插入位置,插入字符,删除字符。

    [输出]

    已建立链表(字符串),插入字符后链表,删除字符后链表,逆转后链表。

    [存储结构]

    采用链式存储结构

    [算法的基本思想]

    建立链表:当读入字符不是结束符时,给结点分配存储空间,写数据域,将新结点插到表尾;插入字符:根据读入的字符在链表中找插入位置,将新结点插入到该位置之前;删除字符:根据读入的删除字符在链表中找到被删结点后,将其从链表中删除;链表逆转:从链表的第一个结点开始对所有结点处理,将每个结点的前驱变为它的后继;打印链表:从链表的第一个结点开始,依次打印各个结点的数据域。


    #define NULL 0
    typedef struct node{
    	char a;
    	struct node *link;
    }node,*nodelink;
    void readlink(nodelink head){
    	nodelink p,q;
    	char c;
    	p=head;
    	printf("Input a linktable(a string):");
    	scanf("%c",&c);
    	if (c=='\n') printf("This string is empty。");
    	while(c!='\n'){
    		q=(nodelink)malloc(sizeof(node));
    		q->a=c;
    		p->link=q;
    		p=q;
    		scanf("%c",&c);
    	  }
    	p->link=NULL;
    }
    void writelink(nodelink head){
    	nodelink q;
    	if (head->link==NULL) printf(" This link is empty。\n");
    	for(q=head->link;q;q=q->link)
    		printf("%c",q->a);
    	printf("\n");
    	}
    int  insert(nodelink head,char k1,char k2){//在字符k1之后插入k2; 
    	nodelink p,q;
    	p=head->link;
    	while(p->a!=k1&&p)
    		p=p->link;
    	if(p){
    		q=(nodelink)malloc(sizeof(node));
    		q->a=k2;
    		q->link=p->link;
    		p->link=q;
    		return 1;
    	  }
    	else  {
    		printf("There is no %c\n",k1);
    		return 0;
    	  }
    }
    int  delete(nodelink head,char k){
    	nodelink p,q;
    	q=head;
    	p=head->link;
    	while(((p->a)!=k)&&p){
    		q=q->link;
    		p=p->link;
    	  }
    	if(p){
    		q->link=p->link;
    		return 1;
    		}
    	else{
    		printf("There is no %c\n",k);
    		return 0;
    	  }
    }
    void opside(nodelink head){
    	nodelink p,q;
    	p=head->link;
    	while(p->link){
    		q=p->link;
    		p->link=q->link;
    		q->link=head->link;
    		head->link=q;
    	  }
    }
    main()
    {
    	char k1,k2,k3;
    	nodelink head;
    	head=(nodelink)malloc(sizeof(node));
    	head->link=NULL;
    	readlink(head);
    	if (head->link!=NULL){
        printf("Build link is :");
    	writelink(head); }
    	if (head->link!=NULL){
    	printf("Please input a char you want to insert after:");
    	k1=getch();
    	printf("%c\n",k1);
    	printf("Please input a char you want to insert:");
    	k2=getch();
    	printf("%c\n",k2);
    	if (insert(head,k1,k2)) {
    	printf("After %c insert %c,link is:",k1,k2);
    	writelink(head);
    	}
    	printf("Please input a char you want to delete:");
    	k3=getch();
    	printf("%c\n",k3);
    	if (delete(head,k3))
    	{ printf("after delete %c,link is:",k3);
    	 writelink(head);
    	}
    	if (head->link!=NULL){
    	printf("Opsite result is :");
    	opside(head);
    	writelink(head);
    	free(head);
    	}
    	}
    	}
    

    展开全文
  • 一个字符常量占几个字节

    千次阅读 2020-09-24 16:30:18
    网上一大堆说的不清不楚,总而言之问你的是一个字符常量占几个字节 回答:      字符型常量是由一对单引号括起来的单个字符。...一个字符常量在计算机的存储中占据一个字节 ...
  • 编写一个函数,它从一个字符串中提取一个字符串。函数原型如下: int substr(char dst[], char src[],intstart, int len)  { } 目标:  从src数组起始位置向后偏移start个字符的位置开始,最多复制len个非NUL...
  • 编写一个函数,它从一个字符串中提取一个字符串。函数原型如下: int substr(char dst[], char src[],int start, int len) {} 目标是:从src数组起始位置向后偏移start个字符的位置开始,最多复制len个非NULL字符...
  • 一个字符串采用string对象存储,设计一个算法判断该字符串是否为回文。 求解思路:首先我们要知道回文是正着念和倒着念一样的,定义一个string类型的字符串,然后让他首(递增)尾(递减)比较,如果不相等就返回...
  • 输入两个字符串,从第一个字符串中删除第二个字符串中的所有字符 比如输入“They are students." 删除之后的第一个字符串变成"The r stdnts." 思路是利用每个字符都有其对应的ASCII码值,将需要删除的字符的ascii为...
  • 3,定义双列集合存储字符串中字符以及字符出现的次数 4,遍历字符数组获取每一个字符,并将字符存储在双列集合中 5,存储过程中要做判断,如果集合中不包含这个键,就将该字符当作键,值为1存储;如果集合中包含这个...
  • 判断一个字符串是否是回文字符

    千次阅读 2019-01-03 16:08:27
    代码: import java.util.Scanner; public class Test { public static void main(String[] args){ ...请输入一个字符串: "); Scanner sc = new Scanner(System.in);//输入 String str = sc.nextLine()...
  • 一个字符串类型的值能存储最大容量是多少? 512M
  • StringBuilder sb = new StringBuilder(); StringBuilder sbId = new StringBuilder(); for (LMSLabConfigLabClassGroup lmsLabConfigLabClassGroup:lmsLabConfigLabClassGroups) { LabClassLMSGroup labClassLM...
  • 在C语言中怎样定义一个字符串并输入输出

    万次阅读 多人点赞 2018-02-28 16:57:29
    说明:一维字符数组,用于存储和处理一个字符串 。二维字符数组,用于同时存储和处理多个字符串 输入输出方法:逐个字符输入输出:%c 整个字符串输入输出:%s 一 :用scanf输入字符串,printf输出字符串  逐个...
  • Java中的一个char采用的是Unicode编码集,占用两个字节,而一个中文字符也是两个字节,因此Java中的char是可以表示一个中文字符的。 但是在C/C++中由于采用的字符编码集是ASCII,只有一个字节,因此是没办法表示一个...
  • 存储每个字符出现的次数,针对字符串s循环一次后,再循环一次,如果当前字符的次数为1则输出字符退出循环,输出的即是第一个只出现了一次的字符。 import java.util.HashMap; import java.util.Map; /** * 给定...
  • 已知一个字符数组,其中存储有R、G、B字符,要求将所有的字符按照RGB的顺序进行排序。比如给定一个数组为char s[] = "RGBBRGGBGB",则排序后应该为RRGGGGBBBB。   分析 解法1)这个题目有点类似于快速排序中用到...
  • 算法(7)统计一个字符串中每个字符出现的次数

    万次阅读 多人点赞 2019-11-06 19:34:34
    有关统计一个字符串中各个字符的个数是求职面试以及大学生竞赛常考的内容,这篇博文给出了两种实现方式,供大家参考!
  • /* 分析: * 1、使用Scanner获取用户输入的字符...* 3、遍历字符串,获取每一个字符 * 4、使用获取到的字符,去Map集合判断key是否存在 * key存在: * 通过字符key,获取value(字符个数) * value++ * put(key,valu...
  • 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中...
  • C语言中存储个字符串的两种方式

    千次阅读 2020-11-15 16:03:59
    C语言中存储个字符串的两种方式 方式 二维字符串数组 声明: char name[4][10] = { “Justinian”, “Momo”, “Becky”, “Bush” }; 在内存中的存储: 这种方式会造成内存空间的浪费 方式二 维指针数组 ...
  • C语言字符字符串的存储

    千次阅读 2020-07-25 11:32:08
    例如,char x=‘a’,将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。 C中字符表示用单引号,字符串表示用双引号,字符串是一段连续...
  • js判断一个字符串中出现次数最多的字符及次数 这道题目在网上看到的常见写法如下: var str="aabbcc"; function maxstringload(str) { var obj={}; for(var i=0;...//key中存储的是每一个字符串 if(o...
  • 计算字符串最后一个单词的长度,单词以空格隔开。 输入格式: 一行字符串,非空,长度小于5000。 输出格式: 整数N,最后一个单词的长度。 输入样例: hello world 输出样例: 5 #解法1: s = str(input...
  • 该题与我前面的一篇博客判断一个字符串是否是唯一的很相似。可以分两种情况来讨论:1、不许使用额外的存储空间;2、可使用额外的存储空间 s表示待处理的字符串,l表示当前非重复字符的个数 1、不许使用额外的存储...
  • 题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 分析:这道题是2006年google的一道笔试题。  看到这道题时,最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时...
  • 在酷壳 – CoolShell.cn 中看到一个文章,判断一个字符串中的所有字符是否在另外一个字符串中出现,如果用循环的话时间复杂度是O(mxn),如果使用先排序后判断时间复杂度是O(mlgm)+O(nlgn)+O(m),作者面试的时候考官...
  • String manipulation is a common task in any programming language. Python provides two common ways to check if a string contains ... Python提供了两种常用方法来检查一个字符串是否包含另一个字符串。 ...
  • PHP删除字符串最后一个字符

    千次阅读 2017-08-20 15:48:37
    通常在存多有效值的时候(如:关键字,标签等),需要对存储的值进行分隔符处理,这样处理后通常会在字符串的首端或末端多一分隔符,这是就需要对字符串进行处理删除首端或末端的分隔符。 方法: rtrim — ...
  • //实际上是一个隐含创建的类型为char的数组,一个字符串常量就是表示一个数组的首地址 //因此可以将字符串常量赋给字符串指针,由于常量值是不能修改的,应将字符串常量赋给一个指向常量的指针 const char* s1 =

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,751,367
精华内容 700,546
关键字:

储存一个字符