[英]Removing spaces from a string
我正在尝试从一个字符串复制到另一个字符串,但是第二个字符串应该省略空格。 我试图通过说,如果原始字符串中的字符是空格,请勿复制它。 而是复制下一个字符。 但是,该程序删除空格后的所有内容。 有任何想法吗?
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;
}
这是一个解决方案:
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;
}
首先,您要返回一个静态选项卡,这是错误的。 其次,如果没有空间,则不要递增“ 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;
}
}
如前所述,您需要分配一个新字符串并返回一个指向它的指针。 此代码有效:
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'
它占用了输入字符串,并为目标字符串分配了安全的大小,尽管浪费了一些字节。
方法很简单; 如果不是空格,则仅复制字符。 复制完所有字符后,我将结束符写在最后并返回指针。
我的解决方案。 选择参数及其顺序以匹配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;
}
****您正在做什么**就是如果原始字符串中的字符是空格,请不要复制它。 而是复制下一个字符。 这不是一个好主意,因为
情况1。当存在多个空格时,它只是丢弃第一个空格并复制第二个空格...
情况2:您的程序仅在找到空格后才复制字符串,它只是跳过不以空格开头的字符串的第一个单词。
情况3。由于返回类型为char,因此仅返回由statement2 [0]指向的字符,并且局部变量的范围仅限于该函数。
//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
我用这个:
char input[100], foreval[100];
for(i=0;i<strlen(input);i++){
if(isspace(input[i])){
continue;
}
strncat(foreval,&input[i],1);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.