标签: character-arrays

如何在JavaScript中获取字符串数组的字符串?

如何在JavaScript中获取字符串数组的字符串?

我在想一个像"Hello world!"数组一样的字符串['H','e','l','l','o',' ','w','o','r','l','d','!']

javascript arrays string character-arrays

335
推荐指数
9
解决办法
28万
查看次数

PHP - 迭代字符串字符

有没有一种很好的方法来迭代字符串的字符?我希望能够做到foreach,array_map,array_walk,array_filter等一个字符串的字符.

类型转换/杂耍没有让我到处(将整个字符串作为数组的一个元素),我发现的最佳解决方案是使用for循环来构造数组.感觉应该有更好的东西.我的意思是,如果你可以索引它,你应该不能迭代吗?

这是我得到的最好的

function stringToArray($s)
{
    $r = array();
    for($i=0; $i<strlen($s); $i++) 
         $r[$i] = $s[$i];
    return $r;
}

$s1 = "textasstringwoohoo";
$arr = stringToArray($s1); //$arr now has character array

$ascval = array_map('ord', $arr);  //so i can do stuff like this
$foreach ($arr as $curChar) {....}
$evenAsciiOnly = array_filter( function($x) {return ord($x) % 2 === 0;}, $arr);
Run Code Online (Sandbox Code Playgroud)

有没有:

A)使字符串可迭代的一种方法
B)从字符串构建字符数组的更好方法(如果是这样,另一个方向怎么样?)

我觉得我错过了一些明显的东西.

php string character-arrays

107
推荐指数
8
解决办法
13万
查看次数

何时应该在字符数组上使用std :: string?

当我设计类接口时,我坐在那里思考是否应该使用const char*const std::string&经常使用它,当它归结为它时,我常常觉得一只手中有6只,另一只手拿着半打.

采用以下两个函数原型:

void foo(const char* str);
void foo(std::string str);
Run Code Online (Sandbox Code Playgroud)

如果foo函数是存储字符串,我会说第二个是更好的选择,因为能够传递字符串并尽可能利用移动语义.但是,如果foo只需要读取字符串,const char*解决方案会更好吗?

从性能角度来看,std::string不需要创建临时的.但是,使用已经存在的字符串作为参数调用该函数看起来很突出:foo(mystr.c_str()).更糟糕的是,如果需要在未来的某个时刻对阵列进行更高级的操作,或者如果应该存储副本,则接口必须进行更改.

所以我的问题是:

是否有明确的定义,无论是个人的还是其他的,约定何时std::string或是const char*更好的选择?此外,在开始一个新项目时,最好是与使用保持一致,还是只考虑最适合当前代码块的哪一个?

c++ string character-arrays

33
推荐指数
3
解决办法
3411
查看次数

制作一个数组来保存C中的字符数组

我的C现在不仅仅是生锈,所以我没有创造出我认为应该非常基本的东西.

允许我将字符数组称为此帖子的字符串.它会让我和你都清楚.

我所拥有的是一个可以容纳1个或更多字符串的数组.例如{"ab","cd","ef"}.我想创建另一个数组来存储字符串数组的多个版本.所以像{{"ab","cd","ef"},{"gh","ij"},{"kl"}}.

我现在拥有的是:

char *arrayOfStrings[50]; // a single array to hold multiple strings
char **arrayOfArraysOfStrings[10]; // array to hold multiple snapshots of arrayOfStrings
Run Code Online (Sandbox Code Playgroud)

字符串数组随着时间的推移而变化,我使用字符串数组数组来基本保存arrayOfStrings的历史快照.当我需要访问数据的快照数组时,我的问题出现了.这是我必须将内容放入快照数组的代码:

arrayOfArraysOfStrings[input_index] = arrayOfStrings; // you can assume input_index is updated correctly, I've already checked that.
Run Code Online (Sandbox Code Playgroud)

这似乎是不正确的,因为当我尝试访问并打印出快照数组的内容时,它只打印出来自最新的arrayOfStrings的信息.我想要的想法是将arrayOfChars所指向的地址存储在快照数组的一个条目中,以便我以后可以访问它.

现在,访问快照数组中的条目是这样完成的:

arrayOfArraysOfChars[historicalIndex][indexOfTargetChar]
Run Code Online (Sandbox Code Playgroud)

我想回答几个问题:

  1. 我概述的方法是否适用于我正在尝试做的事情,还是我的整体逻辑存在缺陷?
  2. 我当前的代码出了什么问题,如何解决?
  3. 有没有更好的方法来做到这一点,如果是这样,数组的初始化,数组的添加和数组的读取如何工作?

--edit 4/18--部分问题在于我在arrayOfArraysOfStrings中设置指针指向arrayOfStrings指向的相同内容.这是糟糕的,因为arrayOfStrings被编辑.我需要一些方法来复制2D数组...最好是通过简单地为arrayOfStrings分配一个新的内存块来指向.

c arrays character-arrays

15
推荐指数
3
解决办法
6万
查看次数

"语义问题:隐式声明库函数'malloc',类型为'void*(unsigned long)'"

我有一段代码,我试图在括号内抓取一个表达式,然后使用它.在下面的代码开始的时候,我正在迭代字符数组,并且pcc是指向当前字符的指针,该字符已被确定为a '('.我的目标是将paranthetical表达式放在一个字符数组中pe.

            int nnrp = 1; /* Net number of right parantheses */
            char * pbpe = pcc; /* Pointer to the beginning paranthetical expression */
            for (++pcc; *pcc!= '\0' && nnrp != 0; ++pcc)
            {
                if (*pcc == '(')
                {
                    ++nnrp;
                }
                else if (*pcc == ')')
                {
                    --nnrp;
                }
                else if (*pcc == '\0')
                {
                    sprintf(err, "Unbalanced paranthesis");
                    return -1;
                }
            }
            /* If we're here, *pcc is the closing paranathesis of *pbpe …
Run Code Online (Sandbox Code Playgroud)

c malloc pointers character-arrays

9
推荐指数
1
解决办法
1万
查看次数

删除标点符号并使用C语言

我正在为学校编写一个程序,要求从文件中读取文本,将所有内容都大写,并删除标点符号和空格.文件"Congress.txt"包含

(国会不得制定任何法律,尊重宗教信仰,禁止自由行使;或者剥夺言论自由或新闻自由;或者人民和平集会的权利,并向政府请求补救不满.)

它读入正确,但我到目前为止删除标点,空格和大写导致垃圾字符的一些主要问题.到目前为止我的代码是:

void processFile(char line[]) {
    FILE *fp;
    int i = 0;
    char c;

    if (!(fp = fopen("congress.txt", "r"))) {
        printf("File could not be opened for input.\n");
        exit(1);
    }

    line[i] = '\0';
    fseek(fp, 0, SEEK_END);
    fseek(fp, 0, SEEK_SET);
    for (i = 0; i < MAX; ++i) {
        fscanf(fp, "%c", &line[i]);
        if (line[i] == ' ')
            i++;
        else if (ispunct((unsigned char)line[i]))
            i++;
        else if (islower((unsigned char)line[i])) {
            line[i] = toupper((unsigned char)line[i]);
            i++;
        }
        printf("%c", line[i]);
        fprintf(csis, "%c", line[i]);
    }

    fclose(fp); …
Run Code Online (Sandbox Code Playgroud)

c arrays string character-arrays output

7
推荐指数
1
解决办法
1189
查看次数

C++:strcat()是否会覆盖或移动null?

现在让我们看看这个小程序

char s[20]="One";
strcat(s,"Two");
cout<<s<<endl;
Run Code Online (Sandbox Code Playgroud)

这里首先s的值为"One",对于直观表示,这是s的值:

O - n - e - \0

然后我在字符串的末尾添加"Two",产生这个:

O - n - e - T - w - o - \0

现在你可以看到字符串中唯一的空值是在"One"之后,现在是在"OneTwo"之后

我的问题是:null是否被字符串"Two"覆盖,然后它在结尾处添加了它自己的null.

或者在开始时已经存在的空值又回到了最后?

(这个问题似乎没有什么区别,但我想知道我学到的一切)

谢谢

c++ character-arrays

6
推荐指数
2
解决办法
3982
查看次数

为什么在String数组中添加Null字符?

我知道我们必须使用空字符来终止字符串数组,如下所示:

char str[5] = { 'A','N','S','\0' };
Run Code Online (Sandbox Code Playgroud)

但我只是想知道为什么使用空字符来终止这样的数组是必要的?

另外,为什么我们不添加null charater来终止这些: -

char str1[5]="ANS";
Run Code Online (Sandbox Code Playgroud)

c arrays string character-arrays

6
推荐指数
1
解决办法
2万
查看次数

澄清C中的char指针

我正在研究K&R第二版,第5章.

在页87,引入字符数组的指针如下:

char *pmessage;
pmessage = "Now is the time";
Run Code Online (Sandbox Code Playgroud)

如何知道这pmessage是一个指向字符数组的指针,而不是指向单个字符的指针?

要扩展,请在第94页上定义以下函数:

/* month_name: return the name of the n-th month */
char *month_name(int n)
{
    static char *name[] = {
        "Illegal month",
        "January", "February", "March",
        ...
    };

    return (n < 1 || n > 12) ? name[0] : name[n];
}
Run Code Online (Sandbox Code Playgroud)

如果只提供了上面的函数声明,那么如何知道是返回单个字符还是字符数组?

如果假设返回来自month_name()一个字符数组并迭代它直到NULL遇到一个,但返回实际上是一个字符,那么是否有可能出现分段错误?

有人可以演示一个指向单个字符与字符数组的指针的声明和赋值,它们对函数的使用以及已经返回的标识?

c pointers character-arrays

6
推荐指数
1
解决办法
164
查看次数

如何从C字符串中删除"垃圾输入"?

我试图写一个函数,将一个数组中删除所有字符,除了'+','-','*','/',和数字.这是我提出的代码:

void eliminateJunk(char string[MAX]){
    int i,j;
    char stringOut[MAX];
    int length = strlen(string) - 1;

    for(i=0; i <= length; i++){
        if(string[i] != '+'
        && string[i] != '-'
        && string[i] != '*'
        && string[i] != '/'
        && !(isdigit(string[i]))){
            for(j=i; j < length; j++){
                string[j] = string[j+1];
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,该函数并不总是从c字符串中删除所有垃圾字符 - 它会获得大部分垃圾字符,但偶尔会留下一些.

输入示例:

123 123
Run Code Online (Sandbox Code Playgroud)

数组的示例输出,在修改后:

123123
Run Code Online (Sandbox Code Playgroud)

但是,在某些输入中,它会留下空间......

输入示例:

123   123
Run Code Online (Sandbox Code Playgroud)

示例输出:

123 123
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决这个问题?我觉得解决方案就在我的鼻子底下,但我似乎无法找到它.

c c-strings character-arrays

6
推荐指数
1
解决办法
952
查看次数

标签 统计

character-arrays ×10

c ×6

string ×5

arrays ×4

c++ ×2

pointers ×2

c-strings ×1

javascript ×1

malloc ×1

output ×1

php ×1