相关疑难解决方法(0)

修剪C中的字符串

简述:

String.Trim使用win32和标准C api(使用MSVC2008进行编译,因此我可以访问所有C++的东西,如果需要,但我只是试图修剪一个char*).

鉴于存在strchr,strtok以及其他字符串函数的所有方式,肯定应该有装饰功能,或者一个可以改变用途...

谢谢

c string winapi

21
推荐指数
4
解决办法
10万
查看次数

剥离C中前导和尾随空格的最佳算法

剥离C中的前导和尾随空格的最佳方法是什么?

c string trim

8
推荐指数
4
解决办法
3万
查看次数

在C中编写String.trim()

可能的重复:
在C中修剪前导/尾随空格的无痛方法?
修剪C中的字符串

嗨伙计们,我在c中编写String trim方法,这是我提出的代码.我认为它可以消除前导和尾随空格,但我希望代码可以更清晰.你能建议改进吗?

void trim(char *String)
{
int i=0;j=0;
char c,lastc;
while(String[i])
{
   c=String[i];
   if(c!=' ')
   {
     String[j]=c;
     j++;
   }
   else if(lastc!= ' ')
   {
     String[j]=c;
     j++;

   }
   lastc = c;
   i++;
}
Run Code Online (Sandbox Code Playgroud)

这段代码看起来干净吗?

c trim

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

使用 char 参数从 <cctype> 调用函数是否安全?

C 编程语言表示,这些函数<ctype.h>遵循一个共同的要求:

ISO C99,7.4p1:

在所有情况下,参数都是 an int,其值应表示为 anunsigned char或应等于宏的值EOF。如果参数有任何其他值,则行为未定义。

这意味着以下代码是不安全的:

int upper(const char *s, size_t index) {
  return toupper(s[index]);
}
Run Code Online (Sandbox Code Playgroud)

如果此代码在char具有相同值空间的实现上执行,signed char并且字符串中有一个具有负值的字符,则此代码调用未定义行为。正确的版本是:

int upper(const char *s, size_t index) {
  return toupper((unsigned char) s[index]);
}
Run Code Online (Sandbox Code Playgroud)

尽管如此,我还是在 C++ 中看到了许多不关心这种未定义行为可能性的例子。那么 C++ 标准中是否有任何内容可以保证上述代码不会导致未定义的行为,或者所有示例都是错误的?

【附加关键词:ctype cctype isalnum isalpha isblank iscntrl isdigit isgraph islowwer isprint ispunct isspace isupper isxdigit tolower]

c c++ character undefined-behavior language-lawyer

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

将scanf与正则表达式一起使用

我一直在尝试在scanf上使用正则表达式,以便读取最多n个字符的字符串并丢弃其他任何内容,直到新行字符.任何空格都应被视为常规字符,因此包含在要读取的字符串中.我研究了维基百科有关正则表达式的文章,但我无法让scanf正常工作.这是我尝试过的一些代码:

scanf("[ ]*%ns[ ]*[\n]", string);
Run Code Online (Sandbox Code Playgroud)

[]应该用于实际的空格字符,*应该表示一个或多个,n是要读取的字符数,string是用malloc分配的指针.我尝试了几种不同的组合; 但是我倾向于只获得一个句子的第一个单词(停留在空格中).此外,*似乎丢弃一个字符而不是意味着"零或更多"......

任何人都可以详细解释scanf如何解释正则表达式?更重要的是,重复使用getc是否有效?

提前致谢

c unix expression scanf formatted-input

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

在C中模仿Python的strip()函数

我最近在C中开始了一个小玩具项目,并且一直在试图模仿作为python字符串对象一部分的strip()功能的最佳方法.

读取fscanf或sscanf表示字符串被处理到遇到的第一个空格.

fgets也无济于事,因为我仍然有新的线条.我确实尝试了一个strchr()来搜索空格并将返回的指针设置为'\ 0',但这似乎不起作用.

c python string fgets

5
推荐指数
2
解决办法
9610
查看次数

在从文件崩溃中读取时使用realloc扩展缓冲区

我正在编写一些需要读取fasta文件的代码,因此我的部分代码(包含在下面)是一个fasta解析器.由于单个序列可以跨越fasta格式的多行,我需要将从文件读取的多个连续行连接成一个字符串.我这样做,通过在读取每一行后重新分配字符串缓冲区,成为序列的当前长度加上读入的行的长度.我做了一些其他的东西,比如剥离空白等.一切顺利第一个序列,但fasta文件可以包含多个序列.所以类似地,我有一个动态的结构数组,有两个字符串(标题和实际序列),是"char*".再次,当我遇到一个新标题(由以'>'开头的行引入)时,我增加序列数,并重新分配序列列表缓冲区.关于为第二个序列分配空间的realloc段错误

*** glibc detected *** ./stackoverflow: malloc(): memory corruption: 0x09fd9210 ***
Aborted
Run Code Online (Sandbox Code Playgroud)

对于我的生活,我不明白为什么.我通过gdb运行它,一切似乎都在工作(即一切都已初始化,值似乎是理智的)......这是代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <errno.h>

//a struture to keep a record of sequences read in from file, and their titles
typedef struct {
    char *title;
    char *sequence;
} sequence_rec;

//string convenience functions

//checks whether a string consists entirely of white space
int empty(const char *s) {
    int i;
    i = 0;
    while (s[i] != 0) {
        if (!isspace(s[i])) …
Run Code Online (Sandbox Code Playgroud)

c realloc fasta

5
推荐指数
1
解决办法
1199
查看次数

在C中修剪函数以修剪到位(不返回字符串)

char testStr[] = "          trim this           ";
char** pTestStr = &testStr;
trim(pTestStr);

int trim(char** pStr)
{
 char* str = *pStr;
 while(isspace(*str)) {
  (*pStr)++;
  str++;
 }

 if(*str == 0) {
  return 0;
 }

 char *end = str + strlen(str) - 1;
 while(end > str && isspace(*end))
  end--;
 *(end+1) = 0;

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

c string pointers trim

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

如何用C中的任何内容替换空格和制表符?

我写了这个函数:

void r_tabs_spaces(char *input) {
       int  i;
       for (i = 0; i < strlen(input); i++)
       {
        if (input[i] == ' ' || input[i] == '\t')
                    input[i] = '';
       }
}
Run Code Online (Sandbox Code Playgroud)

但是当我编译并运行它时,编译器在我尝试输入[i] =''的行中抱怨"错误:空字符常量";

那怎么能用C做呢?

c tabs replace spaces

0
推荐指数
1
解决办法
3561
查看次数

从C中删除字符串中的空格

可能重复:
如何以标准方式修剪前导/尾随空格?

我需要从字符串的开头和结尾删除所有空格,例如,如果我的字符串是

"     hello     world.       "
Run Code Online (Sandbox Code Playgroud)

(没有引号),我需要打印

"hello     world."
Run Code Online (Sandbox Code Playgroud)

我试过这样的事情:

size_t length = strlen (str);
for (newstr = str; *newstr; newstr++, length--) {
    while (isspace (*newstr)) 
        memmove (newstr, newstr + 1, length--);
Run Code Online (Sandbox Code Playgroud)

但它会删除所有空格.

我该如何解决?

c string

0
推荐指数
1
解决办法
715
查看次数