我正在尝试从一个字符串复制到另一个字符串,但第二个字符串应该省略该空格。我试图通过说,如果原始字符串中的字符是空格,请不要复制它。而是复制下一个字符。但是,程序会删除空格后的所有内容。有什么想法吗?
char deleteSpaces(char phrase[256], int length){
int j, i=0;
char phrase2[length];
for(j=0;j<length;j++){
if(phrase[i]==' '){
phrase2[j]=phrase[i+1];
i++;
}
phrase2[j]=phrase[i];
}
return phrase2;
}
答案 0 :(得分:2)
这是一个解决方案:
void deleteSpaces(char src[], char dst[]){
// src is supposed to be zero ended
// dst is supposed to be large enough to hold src
int s, d=0;
for (s=0; src[s] != 0; s++)
if (src[s] != ' ') {
dst[d] = src[s];
d++;
}
dst[d] = 0;
}
答案 1 :(得分:2)
首先,你要返回一个静态标签,这是错误的。 其次,如果没有空间,你不会增加'i'。 如果一行中有多个空格,您将复制空格。如果到达源头,你无法控制。
for(j = 0; j < length; j++)
{
while (src[i] == ' ' && i < length) i++;
if (i < length)
dest[j] = src[i++];
else
{
dest[j] = 0;
break;
}
}
答案 2 :(得分:1)
如前所述,您需要分配一个新字符串并返回指向它的指针。此代码有效:
char* strip (char* input)
{
int loop;
char *output = (char*) malloc (strlen(input));
char *dest = output;
if (output)
{
for (loop=0; loop<strlen(input); loop++)
if (input[loop] != ' ')
*dest++ = input[loop];
*dest = '\0';
}
return output;
}
int main (void)
{
char srcString[] = " this is a test with spaces at the end ";
char* dstString = strip (srcString);
printf ("source string = '%s'\n", srcString);
printf (" dest string = '%s'\n", dstString ? dstString : "malloc failed in strip");
free (dstString);
return 0;
}
输出:
source string = ' this is a test with spaces at the end '
dest string = 'thisisatestwithspacesattheend'
它接受输入字符串并分配一个安全的相同大小的目标字符串,尽管浪费了几个字节。
方法很简单;如果不是空格,则只复制一个字符。复制完所有字符后,我在末尾写下终结符并返回指针。
答案 3 :(得分:1)
我的解决方案。选择参数及其顺序以匹配strncpy()
。
#include <ctype.h>
char *strip_whitespace(char *dest, const char *src, size_t n)
{
char *s, *d;
/*
* Copy 'src' to 'dest', omitting whitespace and making sure we don't
* overflow 'dest'.
*/
for(s=src, d=dest; *s && (d-dest)<n; s++) {
if( !isspace(*s) ) {
*d = *s;
d++;
}
}
/* Ensure that dest is NUL terminated in any event */
if( d-dest < n ) {
*d = '\0';
} else {
dest[n-1] = '\0';
}
return dest;
}
答案 4 :(得分:1)
****你在做什么**如果原始字符串中的字符是空格,请不要复制它。而是复制下一个字符。 不是一个好主意,因为
案例1。当存在多个空格时,它只会丢弃第一个空格并复制第二个空格......
案例2:您的程序只在找到空格后复制字符串,它只是跳过不以空格开头的字符串的第一个单词。
案例3。您只返回由phrase2 [0]指向的字符,因为返回类型为char,并且局部变量的范围仅限于该函数....
//the corrected programme
int deleteSpaces(char phrase[256],charphrase2[256])
{
int i,j;
i=j=0;
while(phrase[i]!=NULL){
if(phrase[i]!=' '){
phrase2[j]=phrase[i];
j++;
}
i++;
}//end while
phrase2[j]=phrase[i] //nulcharceter copied
return 0;
}//end deleteSpaces function
答案 5 :(得分:1)
我用这个:
char input[100], foreval[100];
for(i=0;i<strlen(input);i++){
if(isspace(input[i])){
continue;
}
strncat(foreval,&input[i],1);
}