C语言字符串 循环右移解决方案
C语言字符串 循环右移
为什么总是出错呢?
------解决方案--------------------
char* s2=(char*)malloc(len);//这一句应该为char* s2=(char*)malloc(len+1);
------解决方案--------------------
14行改为 char* s2=(char*)malloc(len+1); // 预留结束符的空间
再加一行 *(s2+len) = '\0'; //末尾设为结束符,或者memset(s2 ,0 ,len+1); 全部初始化
------解决方案--------------------
同上,字符串后面结束符占一个空位
------解决方案--------------------
------解决方案--------------------
std::string version
#include<stdio.h>
#include<string.h>
#include<malloc.h>
void shift(char* s,int n)
{
char* p;
char* q;
int len=strlen(s);
if(len==0)
return;
if(n<=0||n>=len)
return;
char* s2=(char*)malloc(len);
p=s;
q=s2+n%len;
while(*p)
{
*q++=*p++;
printf("%d,%d",q-s2,len);
if(q-s2>=len)
{
// *q=;
q=s2;
}
}
strcpy(s,s2);
free(s2);
}
int main()
{
char s[4];
scanf("%s",s);
shift(s,2);
printf("%s",s);
return 0;
}
为什么总是出错呢?
------解决方案--------------------
char* s2=(char*)malloc(len);//这一句应该为char* s2=(char*)malloc(len+1);
------解决方案--------------------
14行改为 char* s2=(char*)malloc(len+1); // 预留结束符的空间
再加一行 *(s2+len) = '\0'; //末尾设为结束符,或者memset(s2 ,0 ,len+1); 全部初始化
------解决方案--------------------
同上,字符串后面结束符占一个空位
------解决方案--------------------
#include<stdio.h>
#include<string.h>
#include<malloc.h>
void shift(char* s,int n)
{
char* p;
char* q;
int len=strlen(s);
if(len==0)
return;
if(n<=0
------解决方案--------------------
n>=len)
return;
char* s2=(char*)malloc(len+1); //预留'\0'的空间
p=s;
q=s2+n%len;
while(*p)
{
*q++=*p++;
//printf("%d,%d",q-s2,len);
if(q-s2>=len)
{
// *q=;
q=s2;
}
}
*(s2+len) = '\0'; //结束符标志
strcpy(s,s2);
free(s2);
}
int main()
{
char s[5];
scanf("%s",s);
shift(s,2);
printf("%s",s);
return 0;
}
------解决方案--------------------
std::string version
#include <string>
using namespace std;
string shift(const string& s, int n)
{
int n1=n%s.size();
string s1(s.begin()+n1,s.end());
s1 += s.substr(0,n1);
return s1;
}
int main()
{
string s;
cout << "input a string: " << endl;
cin >> s;
string s1=shift(s,2);
cout << s1 << endl;
return 0;
}