c语言怎么删掉字符串的前几个字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言怎么删掉字符串的前几个字符相关的知识,希望对你有一定的参考价值。

现在有一串字符需要输入,规定输入的字符串中只包含字母和*号。请用C语言编写程序,实现以下功能:除了字符串前后的*号之外,将串中其他的*号全部删除。

例如,假设输入的字符串为****A*BC*DEF*G********,删除串中的*号后,字符串变为****ABDEFG********

该问题需要对字符串进行操作,而在C语言中没有专门的字符串变量,因此如果需要将一个字符串存放在变量中,则必须使用字符数组,即使用一个字符型数组来存放一个字符串,数组中的每一个元素存放一个字符。

C语言如何删除字符串前后星号?

C语言/C++学习请加:556791282群内有更多资料哦!

算法分析

设置两个指向字符的指针变量t和f。先使用循环语句让t指针指向字符串中最后一个字符,而f指针指向字符串中第一个字符;再判断t和f指向的字符是否为“*”,如果为“*”,则t指针自减,f指针自增,直到遇到第一个不是的字符为止。

再定义一个函数fun()用于删除字符串中的“*”号,同时保留字符串前后的“*”号。

下面是完整的代码:

#include <stdio.h>

int fun(char *a, char *h, char *p)



int i, j;

/*删除指针h与p之间的所有“*”*/

for(i=0,j=0; &h[i]<p; i++)

if(h[i]!='*')

h[j++]=h[i];

/*将指针p至字符串尾部的所有字符前移*/

for(i=0; p[i]; i++,j++)

h[j]=p[i];

h[j]='\0'; /*在字符串尾部添加结束标志*/

return 0;



int main( )



char s[81], *t, *f;

printf("Enter a string :\n");

gets(s); /*输入字符串*/

t=f=s; /*用字符指针t、f指向串s*/

while(*t)

t++;

t--; /*将指针t定位到字符串中最后一个字符*/

while(*t == '*') /*指针t指向字符串中最后一个字符*/

t--;

while (*f == '*') /*指针f指向字符串中第一个字符*/

f++;

fun(s, f, t);

printf("The string after deleted:\n"); /*输出结果*/

puts(s);

return 0;



运行结果:

Enter a string :

****A*BC*DEF*G********

The string after deleted:

****ABCDEFG********

C语言学习其实并不难,只要你有决心,够努力,就会成功。想免费学习的可以加脱线下面得号!
参考技术A #include <stdio.h>
void del_chr( char *s, char ch )

char *t=s; //目标指针先指向原串头
while( *s != '\0' ) //遍历字符串s

if ( *s != ch ) //如果当前字符不是要删除的,则保存到目标串中
*t++=*s;
s++ ; //检查下一个字符

*t='\0'; //置目标串结束符。

void main()

char str[]="***abcde***fghi***" ;
del_chr(str, '*' );
printf("str=【%s】\n", str );

上面是删除的一个简单例子,具体详细的删除操作可以参考这篇博文http://blog.csdn.net/hellotianchao/article/details/53144936本回答被提问者采纳

仅选择字符串 C++ 中的前几个字符

【中文标题】仅选择字符串 C++ 中的前几个字符【英文标题】:Selecting only the first few characters in a string C++ 【发布时间】:2016-03-09 21:35:53 【问题描述】:

我想使用 C++ 选择字符串的前 8 个字符。现在我创建了一个 8 个字符长的临时字符串,并用另一个字符串的前 8 个字符填充它。

但是,如果另一个字符串不是 8 个字符长,则会留下不需要的空格。

string message = "        ";

const char * word = holder.c_str();

for(int i = 0; i<message.length(); i++)
    message[i] = word[i];

如果word"123456789abc",则此代码可以正常工作并且message 包含"12345678"

但是,如果word 更短,例如"1234",则消息最终为"1234 "

如何选择字符串的前八个字符,或者如果字符串短于 8 个字符,则选择整个字符串?

【问题讨论】:

【参考方案1】:

只需使用std::string::substr:

std::string str = "123456789abc";
std::string first_eight = str.substr(0, 8);

【讨论】:

他的问题模棱两可,我们无法判断哪个答案是正确的。这取决于“从字符串中删除其余字符”中“字符串”的OP的含义。 如果第一个字符串少于 8 个字符,对它执行 substr 会改变字符串的任何内容吗?但是感谢您的快速回答,它运行良好。 @qlear 您应该阅读文档 - substr() 是一个 const 方法,即在任何情况下都不会更改对象本身。 @qlear 将引发std::out_of_range 异常。正如 Slava 所说,std::string::substr 不会修改它被调用的字符串;它将返回一个新字符串。有关在没有任何间接的情况下修改字符串本身的方法,请参阅 DavidSchwartz 的回答。【参考方案2】:

只需在字符串上调用resize。

【讨论】:

【参考方案3】:

如果我没有理解错,那就写吧

std::string message = holder.substr( 0, 8 );

如果你需要从字符数组中抓取字符然后你可以写例如

const char *s = "Some string";

std::string message( s, std::min<size_t>( 8, std::strlen( s ) );

【讨论】:

【参考方案4】:

或者你可以使用这个:

#include <climits>
cin.ignore(numeric_limits<streamsize>::max(), '\n');

如果最大值为 8,它将停在那里。但是你必须设置

const char * word = holder.c_str();

到 8。我相信你可以通过写作来做到这一点

 const int SIZE = 9;
 char * word = holder.c_str();

让我知道这是否有效。

如果他们在任何时候点击空格,它只会读取到空格。

【讨论】:

【参考方案5】:
char* messageBefore = "12345678asdfg"
int length = strlen(messageBefore);
char* messageAfter = new char[length];

for(int index = 0; index < length; index++)

    char beforeLetter = messageBefore[index];
    // 48 is the char code for 0 and 
    if(beforeLetter >= 48 && beforeLetter <= 57)
    
        messageAfter[index] = beforeLetter;
    
    else
    
        messageAfter[index] = ' ';
    

这将创建一个适当大小的字符数组并传输每个数字字符 (0-9) 并用空格替换非数字。这听起来像您正在寻找的东西。

鉴于其他人根据您的问题所做的解释,您可以轻松修改上述方法,为您提供仅包含数字部分的结果字符串。

类似:

int length = strlen(messageBefore);
int numericLength = 0;
while(numericLength < length &&
      messageBefore[numericLength] >= 48 &&
      messageBefore[numericLength] <= 57)

    numericLength++;

然后在前面的逻辑中使用numericLength 代替length,你会得到第一串数字字符。

希望这会有所帮助!

【讨论】:

以上是关于c语言怎么删掉字符串的前几个字符的主要内容,如果未能解决你的问题,请参考以下文章

C语言中如何截取字符串的前几个字符?

sql 怎么取 字符串的前几位

c++怎么提取字符串的一部分

尾部只有一行的前几个字符

initWithNibName 方法,我可以只使用笔尖名称的前几个字符吗

用mysql查询出字段中的前几个字