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语言怎么删掉字符串的前几个字符的主要内容,如果未能解决你的问题,请参考以下文章