怎么用c++代码输出一个字母O的图像

如题所述

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
//返回一个 char *arr[], size为返回数组的长度
char **explode(char sep, const char *str, int *size)
{
        int count = 0, i;
        for(i = 0; i < strlen(str); i++)
        {       
                if (str[i] == sep)
                {       
                        count ++;
                }
        }
 
        char **ret = calloc(++count, sizeof(char *));
 
        int lastindex = -1;
        int j = 0;
 
        for(i = 0; i < strlen(str); i++)
        {       
                if (str[i] == sep)
                {       
                        ret[j] = calloc(i - lastindex, sizeof(char)); //分配子串长度+1的内存空间
                        memcpy(ret[j], str + lastindex + 1, i - lastindex - 1);
                        j++;
                        lastindex = i;
                }
        }
        //处理最后一个子串
        if (lastindex <= strlen(str) - 1)
        {
                ret[j] = calloc(strlen(str) - lastindex, sizeof(char));
                memcpy(ret[j], str + lastindex + 1, strlen(str) - 1 - lastindex);
                j++;
        }
 
        *size = j;
 
        return ret;
}

以上代码在给子串分配空间都多分配了一个字节的空间,这是因为C语言的字符串是以 '\0' 结尾,多出来的一个字节用来存储这个'\0'
对于首尾出现的切割符以及多个切割符连续的情况,会切割出空字符串。



以下是调用示例:


int main()
{
        int size;
 
        char **ret = explode(',', ",aaabbb,,ddd,eeee,ffff,fggg,,", &size);
 
 
        int i;
        for(i = 0; i < size; i++)
        {
                printf("%s\n", ret[i]);
                free(ret[i]);
        }
        free(ret);
        return 0;
}

运行结果:


[root@localhost c]# ./a.out 

aaabbb

ddd
eeee
ffff
fggg


[root@localhost c]# 

由于使用了堆内存,所以对调用结果需要释放内存,可以单独再写一个方法专门用于释放结果:



void freeExplode(char **arr, int size)
{
        int i;
        for(i = 0; i < size; i++)
        {
                free(arr[i]);
        }
 
        free(arr);
}

That's all ^^
--------------------- 
作者:豆蔻词工难赋深情 
来源:CSDN 
原文:https://blog.csdn.net/zhang197093/article/details/76601239 
版权声明:本文为博主原创文章,转载请附上博文链接!

温馨提示:内容为网友见解,仅供参考
无其他回答

怎么用c++代码输出一个字母O的图像
include <stdio.h>#include <string.h>#include <stdlib.h> \/\/返回一个 char *arr[], size为返回数组的长度char **explode(char sep, const char *str, int *size){ int count = 0, i; for(i = 0; i < strlen(str); i++) { if (str[i] == sep) { coun...

c++字母相连输出
using namespace std;char map[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";void p(char c) { int index = c - 'A';if (index == 0) { cout<<map[25];} else { cout<<map[index-1];} cout<<map[index];if (index == 25) { cout<<map[0];} else { cout<>c;p(c);} ...

c++语言 查找其中第一个o出现的位置
if(a[i]=='O'){printf("第一个“o”出现在第%d位置\\n",i);break;} } } 程序如上……还有,4位置指的是数组中的位置,如果想要是字母中的位置(就是第五个字母),只要将break前的i改为i+1即可。

C++编程:输入3个大写英文字母,把他们转换成小写字母后输出
用ASCII码里面字母的编码,同一个字母的大写字母和小写字母的数字编码只相差32。相信你能够编出来了吧

求解C++一个编程问题
这个程序是输入ch,然后打印ch+1,即ACSII码表中ch的下一个字符 因此输入字符'A',会输出字符'B'输入字符'n',会输出字符'o'而输入空格,会输出叹号,如图ASCII码表:空格的下一位正是叹号 因此叹号不是因为输入回车,是因为输入的是空格 而代码中显示,输入换行符'\\n',输出的仍为换行 ...

求一个用C++写的Delaunay三角剖分间接实现Voronoi图的代码。最好有算 ...
void minWeightTriangulation(int n,int t[][N],int s[][N]); \/\/用动态规划计算最优值 void print(int s[][N],int i,int j); \/\/输出 };int point::distance(Point i,Point j){ int s=(i.x-j.x)*(i.x-j.x)+(i.y-i.y)*(i.y-i.y);return sqrt(s);} int ...

怎么用C++判断一个字母是不是元音字母?
1、输入一个英文字母;2、判断是否为元音字母;3、输出结果。二、参考代码:include <stdio.h>int main(){ char c; c=getchar();\/\/读入一个字符,存储在c中。 if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'||c=='A'||c=='E'||c=='I'||c=='O'||c==...

用C语言输出一个字母行
include<stdio.h> void main(){ char c;for(c='A';c<='Z';c++)printf("%c ",c);} \/\/这样?

c++ cout怎么实现格式输出?
1、cout在命名空间std中,使用前需要usingnamespacestd,或者std:cout4可以使用引用,或指针指向这个对象,意思想说,想用ostream做一个函数的形式参数,就必须使用引用或指针。因为实参肯定是cout,且只能有这一个对象。2、十进制、八进制、十六进制输出;设置填充字符setfill();强制显示小数点和无效0...

C++编写依次输入26个字母如何编写
程序代码:include <iostream> using namespace std;void main(){ int i;cout<<"输出小写字母:";for (i=0;i<26;i++)cout << (char) (i+'a'); \/\/小写 cout << endl;cout<<"输出大写字母:";for (i=0;i<26;i++)cout << (char) (i+'A'); \/\/ 大写 cout << endl;}...

相似回答