【发布时间】:2016-05-19 23:48:31
【问题描述】:
我尝试编写一个脚本来删除多余的空格,但我没能完成它。
基本上我想将abc sssd g g sdg gg gf 转换为abc sssd g g sdg gg gf。
在 PHP 或 C# 等语言中,这将非常容易,但在 C++ 中则不然,我明白了。这是我的代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <unistd.h>
#include <string.h>
char* trim3(char* s) {
int l = strlen(s);
while(isspace(s[l - 1])) --l;
while(* s && isspace(* s)) ++s, --l;
return strndup(s, l);
}
char *str_replace(char * t1, char * t2, char * t6)
{
char*t4;
char*t5=(char *)malloc(10);
memset(t5, 0, 10);
while(strstr(t6,t1))
{
t4=strstr(t6,t1);
strncpy(t5+strlen(t5),t6,t4-t6);
strcat(t5,t2);
t4+=strlen(t1);
t6=t4;
}
return strcat(t5,t4);
}
void remove_extra_whitespaces(char* input,char* output)
{
char* inputPtr = input; // init inputPtr always at the last moment.
int spacecount = 0;
while(*inputPtr != '\0')
{
char* substr;
strncpy(substr, inputPtr+0, 1);
if(substr == " ")
{
spacecount++;
}
else
{
spacecount = 0;
}
printf("[%p] -> %d\n",*substr,spacecount);
// Assume the string last with \0
// some code
inputPtr++; // After "some code" (instead of what you wrote).
}
}
int main(int argc, char **argv)
{
printf("testing 2 ..\n");
char input[0x255] = "asfa sas f f dgdgd dg ggg";
char output[0x255] = "NO_OUTPUT_YET";
remove_extra_whitespaces(input,output);
return 1;
}
它不起作用。我尝试了几种方法。我要做的是逐个字母地迭代字符串并将其转储到另一个字符串中,只要一行中只有一个空格即可;如果有两个空格,则不要将第二个字符写入新字符串。
我该如何解决这个问题?
【问题讨论】:
-
它是 c++,这就是我编译运行的方式
clear; rm -f test2.exe; g++ -o test2.exe test2.cpp; ./test2.exe; -
不要在 C++ 中编写 C 风格的代码!使用语言功能。
-
@Olaf 在 C++ 中编写 C 风格的代码是有正当理由的。大多数情况下,一个更惯用和更明显的 C++ 替代方案可能会更好,但这取决于具体情况。
-
@Deduplicator:语义仍然可能不同。即使语法相同。
-
嗯...
0x255...一个非常好奇的常数。