如何删除字符串数组中的Null值
像{, - 2,3, - 4,+ 5,,66 ...}
我需要删除其间的空值并重新调整数组大小
我不想使用列表
我不想创建一个新的数组
如果可以使用简单的代码,请告诉我.谢谢.
所以我读到了:
char pattern[] = "ould";
基本上是更简单的写作方式:
char pattern[] = { 'o', 'u', 'l', 'd', '\0' };
我知道null字符\0标志着字符串的结束,但如果我写它如下:
char pattern[] = { 'o', 'u', 'l', 'd'}; (没有\ 0)
它仍然编译.
哪里pattern没有\0原因问题,因为它似乎是编译没有警告(-Wall)
(C初学者警报)
我想从用户读取一些整数并将它们存储在一个数组中.所以:
int main (void)
{
int i, num, cont = 0;
int arre[10];
for (int i=0;i<5;i++)
{
scanf("%d", arre[i]);
etc.
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我在OSX上得到了分段故障11.如果我用Valgrind运行它,当我输入第一个整数时会出现问题,它告诉我:
==1610== Command: ./ArraysAndPointers
==1610==
2
==1610== Use of uninitialised value of size 8
==1610== at 0x18F0BA: __svfscanf_l (in /usr/lib/system/libsystem_c.dylib)
==1610== by 0x18718A: scanf (in /usr/lib/system/libsystem_c.dylib)
==1610== by 0x100000F2D: main (ArraysAndPointers.c:11)
==1610==
==1610== Invalid write of size 4
==1610== at 0x18F0BA: __svfscanf_l (in /usr/lib/system/libsystem_c.dylib)
==1610== by 0x18718A: scanf (in /usr/lib/system/libsystem_c.dylib)
==1610== by 0x100000F2D: main (ArraysAndPointers.c:11)
==1610== Address 0x0 is …Run Code Online (Sandbox Code Playgroud) 当我尝试某事时(我只是为了理解),我得到了这个.请解释一下这种行为:
第一次尝试:
void main()
{
char src[] = "vinay";
int i;
// char name[5] = "test";
char *name= "abcde";
printf("%s \n", name);
if (*(name+5) == '\0')
printf("6th char is null\n");
strcpy(name,src);
printf("printcheck \n");
for (i=0 ; i <6 ; i++)
{
printf("%c \n", *(name+i));
}
printf("%s \n",name);
}
Run Code Online (Sandbox Code Playgroud)
输出:
abcde
6th char is null
zsh: 16644 segmentation fault (core dumped) a.out
Run Code Online (Sandbox Code Playgroud)
第二次尝试:
void main()
{
char src[] = "vinay";
int i;
char name[] = "pqrst";
//char *name= "abcde";
printf("%s \n", …Run Code Online (Sandbox Code Playgroud) 我正在尝试从文件中读取字符串并将其读取到结构中,但是当我遇到两个或多个单词的字符串时,我似乎尝试的所有操作均不起作用
文件中的数据
“ K300”“键盘”“美国通用” 150.00 50
“ R576”“ 16英寸轮辋”“ Toyota Verossa” 800.00 48
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct partInfo {
char number[6];
char name[20];
char description[30];
double price;
int qty;
}Part;
int main() {
char num[6], name[20], desc[30];
int i=0;
int q;
double p;
char ch;
FILE * in = fopen("input.txt", "r");
Part part1;
fscanf(in, " %[^ ]s", &num);
printf("%s\n", num);
fscanf(in, " %[^ ]s", &name);
printf("%s\n", name);
fscanf(in, " %[^ ]s", &desc); //right here only copy …Run Code Online (Sandbox Code Playgroud) 在字符串对象上使用Trim()方法时,可以向其传递一个字符数组,它将从字符串中删除这些字符,例如:
string strDOB = "1975-12-23 ";
MessageBox.Show(strDOB.Substring(2).Trim("- ".ToCharArray()));
Run Code Online (Sandbox Code Playgroud)
结果是"75-12-23"而不是预期的结果:"751223",这是为什么?
额外的问题:与这一行相比,哪一个会有更多的开销(它完全相同):
strDOB.Substring(2).Trim().Replace("-", "");
Run Code Online (Sandbox Code Playgroud) 我有一个代码,其中字符数组由整数填充(转换为char数组),并由另一个函数读取,该函数将其重新转换回整数.我使用以下函数来转换为char数组:
char data[64];
int a = 10;
std::string str = boost::lexical_cast<std::string>(a);
memcpy(data + 8*k,str.c_str(),sizeof(str.c_str())); //k varies from 0 to 7
Run Code Online (Sandbox Code Playgroud)
并使用以下方法重新转换回字符:
char temp[8];
memcpy(temp,data+8*k,8);
int a = atoi(temp);
Run Code Online (Sandbox Code Playgroud)
这一般工作正常,但是当我尝试将其作为涉及qt(ver 4.7)的项目的一部分时,它编译得很好并且在尝试使用memcpy()读取时给出了分段错误.请注意,分段故障仅在读取循环中发生,而不是在写入数据时发生.我不知道为什么会这样,但我希望通过任何方法完成它.
那么,还有其他任何我可以使用的函数可以接受字符数组,第一位和最后一位并将其转换为整数.然后我根本不必使用memcpy().我想要做的是这样的事情:
new_atoi(data,8*k,8*(k+1)); // k varies from 0 to 7
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我有一个类型char和字符串数组,我将从键盘中介绍.任何人都可以告诉我如何在char数组中引入字符串的每个字符?
在C++中,如果我这样做:
char myArray[] = {'1','2','3','4','5','6','7','8','9'};
Run Code Online (Sandbox Code Playgroud)
这会分配10个空格吗?最后一个元素是'/ 0'?
关于什么:
char myArray[9] = {'1','2','3','4','5','6','7','8','9'};
Run Code Online (Sandbox Code Playgroud)
在这种情况下我只分配了9个空格吗?这不好吗?
最后,当我这样做时会发生什么:
char myArray[10] = {'1','2','3','4','5','6','7','8','9','/0'};
Run Code Online (Sandbox Code Playgroud) 我现在正从C转到Java,我正在学习一些关于Strings的教程.在教程中的某一点上,他们展示了从字符数组中实例化一个新字符串然后打印字符串.我跟着,但我想打印字符数组和字符串,所以我尝试了这个:
class Whatever {
public static void main(String args[]) {
char[] hello = { 'h', 'e', 'l', 'l', 'o', '.'};
String hello_str = new String(hello);
System.out.println(hello + " " + hello_str);
}
}
Run Code Online (Sandbox Code Playgroud)
我的输出是这样的:
[C@9304b1 hello.
Run Code Online (Sandbox Code Playgroud)
显然,这不是您在Java中打印字符数组的方式.但是我想知道我是不是有垃圾?我在某个网站上看到打印一个字符数组会给你一个地址,但这对我来说并不像是一个地址......我在网上找不到很多关于它的信息.
那么,我刚刚打印了什么?
和奖金问题:你如何在java中正确打印字符数组?