分解字符串

  (两个字符串是不是一起输入一个又接着输另外一个,这个地方有点小困惑?) 

同时输入,我觉得用指针数组比较好;分开输入就无所谓了。


按要求分解字符串,输入两个数M,N,M代表输入的M个待处理的字符串,N代表输出的每串字符串要处理成的位数,不够补0。

例如:

输入:2  8

          abc  123456789

输出:abc00000

          12345678,90000000


// 答案一:字符串分开输入,单独处理并输出。不一定满足,推荐答案2,第二种代码

/* 
  按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。 
  例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000” 
  (两个字符串是不是一起输入一个又接着输另外一个,这个地方有点小困惑?) 
 */  
#include<iostream>
using namespace std;
int main()
{
	int m,n;
	char str[126];
	int i,j,k,l,len,flag;
	cout<<"input 2 numbers:"<<endl;
	cin>>m>>n;
	cout<<"输入"<<m<<"个字符串"<<endl<<"每串限制字符数为:"<<n<<endl;

	for(i=0;i<m;i++)
	{
		cout<<"输入第"<<(i+1)<<"个字符串"<<endl;
		cin>>str;
		len=strlen(str);
		if(len<=n)
		{
			for(j=len;j<n;j++)
			{
				str[j]='0';
			}
			str[n]='\0';
			cout<<"结果"<<str<<endl;
		}
		else
		{
			for(k=len;k<(len/n+1)*n;k++)
			{
				str[k]='0';
			}
			str[(len/n+1)*n]='\0';
			if(len%n==0)
			{
				flag=0;
			}
			else
			{
				flag=1;
			}
			for(l=0;l<(len/n+flag)*n;l++)
			{
				cout<<str[l];
				if ((l+1)%n==0)
				{
					cout<<endl;
				}
			}			
		}

	}
	system("pause");
	return 0;
}




程序二:利用指针数组实现

注意的地方:

1:对于 char *str[50];  指针数组来说,每个数组元素都相当于一个指针变量,所以不分配其指向的空间的话,是无法直接给它赋值让它指向的。

		str[i]=(char *)malloc(sizeof(char)*100);
		gets(str[i]);

2:多次重复输入的时候,需要考虑到缓存区的问题,非常容易出错,这里。使用见下面源码:

fflush(stdin);//  非常重要,避免缓存区的问题
3:将字符数组的单个数组元素(即一个指针变量)复制给指针p后(指针的复制,2个指针变量)后,可以用“p[2]”实现对字符串中的单个字符进行操作

char *p=str[i];

/* 
  按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。 
  例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000” 
  (两个字符串是不是一起输入一个又接着输另外一个,这个地方有点小困惑?) 
 */  

//满足要求,字符串一起输入,

#include<iostream>
using namespace std;
int main()
{
	int m,n;
	char *str[50];
	int i,j,k,l,len,flag;
	cout<<"input 2 numbers:"<<endl;
	cin>>m>>n;
	cout<<"输入"<<m<<"个字符串"<<endl<<"每串限制字符数为:"<<n<<endl;
	fflush(stdin);//  非常重要,避免缓存区的问题
	for(i=0;i<m;i++)
	{
		str[i]=(char *)malloc(sizeof(char)*100);
		gets(str[i]);
	}
	for(i=0;i<m;i++)
	{	
		cout<<"输入的字符串:"<<str[i]<<endl;
	}

	for(i=0;i<m;i++)  //挨个处理字符串
    {   

        len=strlen(str[i]);  
        if(len<=n)  
        {  
			char *p=str[i];
            for(j=len;j<n;j++)  
            {  
                p[j]='0';  
            }  
            p[n]='\0';  
            cout<<"结果"<<str[i]<<endl;  
        }  
        else  
        {  
			if(len%n==0)  
            {  
                flag=0;  
            }  
            else  
            {  
                flag=1;  
            } 
			char *q=str[i];
            for(k=len;k<(len/n+flag)*n;k++)  
            {  
                q[k]='0';  
            }  
            q[(len/n+1)*n]='\0';

			for(l=0;l<(len/n+flag)*n;l++)  
            {  
                cout<<q[l];  
                if ((l+1)%n==0)  
                {  
                    cout<<endl;  
                }  
            }             
        }  
  
    }  


	

	system("pause");
	return 0;
}


你可能感兴趣的:(字符串,String,分解)