删除字符串首尾数字字符

从键盘输入一个字符串,删除该字符串的所有首部和尾部数字字符,输出修改后的字符串以及该字符串的长度(限定在一个数组内进行)

#include <iostream>
using namespace std;
int main()
{
    char s[1000];
    gets(s);
    int flag = 0,start = -1;
    int i=0,j=0,k;
    while(s[i] != '\0')
    {
        if(s[i] >='0' && s[i] <='9')
        {
            if(flag == 1 && start == -1)
            {
                start = i;
            }
            i++;
            continue;
        }
        else
        {
            flag = 1;
            if(start >= 0)
            {
                for(k=start;k<i;k++)
                    s[j++] = s[k];
                start = -1;
            }
            s[j++] = s[i++];
        }
    }
    s[j] = '\0';
    cout<<s<<endl;
    cout<<strlen(s)<<endl;
}

参考一下这个

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

int main() {
    string str;
    getline(cin, str);

    int i = 0;
    while (isdigit(str[i])) {
        i++;
    }
    str = str.substr(i);

    int j = str.length() - 1;
    while (j >= 0 && isdigit(str[j])) {
        j--;
    }
    str = str.substr(0, j + 1);

    cout << "修改后的字符串: " << str << endl;
    cout << "长度: " << str.length() << endl;

    return 0;
}
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7695247
  • 这篇博客也不错, 你可以看下使用指针方法实现字符串逆序存放后再输出;用指针方法编写一函数,实现两个字符串的比较
  • 除此之外, 这篇博客: 拷贝构造函数详解中的 若未显示定义,系统生成默认的拷贝构造函数。默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝我们叫做浅拷贝或者值拷贝 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里插入图片描述

    #include<iostream>
    using namespace std;
    class Date
    {
    public:
    	//构造函数
    	Date(int year = 2020, int month = 5, int day = 5)
    	{
    		_year = year;
    		_month = month;
    		_day = day;
    		cout << "Date(int,int ,int):" << this << endl;
    		//看构造的是哪一个对象
    	}
    
    	//析构函数
    	~Date()
    	{
    		//对于日期类来说,这里面没有什么资源是需要去释放的
    		//所以对于日期类来说,给不给析构函数其实都没有什么影响
    		cout << "~Date():" << this << endl;
    		//看析构的是哪一个对象
    	}
    private:
    	int _year;
    	int _month;
    	int _day;
    };
    void TestDate()
    {
    	Date d1(2020, 5, 5);
    	Date d2(d1);
    }
    int main()
    {
    	TestDate();
    	return 0;
    }
    
    • 这个代码我们没有显示的声明拷贝构造函数,但是d2对象仍然创建成功了,d2的内容和d1的内容是一摸一样的,同时,代码并没有什么问题,也没有崩溃,但是有些时候,编译器自动声明的拷贝构造函数是有问题的,比如针对string类来说
  • 您还可以看一下 魏老师老师的从零搭建英伟达平台远程开发调试环境课程中的 远程启动需要图形解码的应用程序以及开机启动部署小节, 巩固相关知识点